当文件丢失时,我试图取消承诺。但是,当我这样做时,我会在输出中看到:

Unhandled rejection Error: ENOENT, open '/home/one/github/infrastructure_manager_ui/gulp/util/token-file.json'
  at Error (native)


并且createTokenFile()不能正常运行。不知道我在做什么错:

 function refreshToken() {
        var tokenFile = path.join(__dirname, 'token-file.json');
        return tokenPromise = fs.readFileAsync(tokenFile, {encoding: 'utf-8'})
        .then(JSON.parse)
        .cancellable()
        .catch(Promise.CancellationError, function(err) {
            console.log(err);
            if (err.code !== 'ENOENT') {
                throw err;
            } else {
                createTokenFile();
                tokenPromise.cancel();
            }
        });
}

最佳答案

.cancellable()在这里什么都不做。 .cancellable()将一个承诺变成一个可以手动取消的承诺。您在这里没有做任何取消操作的事情,因此也没有被取消。

如果要捕获文件读取错误,则应捕获它:

function refreshToken() {
        var tokenFile = path.join(__dirname, 'token-file.json');
        return tokenPromise = fs.readFileAsync(tokenFile, {encoding: 'utf-8'})
        .then(JSON.parse)
        .catch(function(err) {
            console.log(err);
            if (err.code !== 'ENOENT') {
                throw err;
            } else {
                return createTokenFile();
            }
        });
}

07-26 08:13