bluebird promise catch() 没有使用 Promise.CancelError 调用内部函数



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

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();
            }
        });
}

最新更新