当文件丢失时,我试图取消承诺。但是,当我这样做时,我在输出中看到:
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();
}
});
}
答案 0 :(得分:1)
.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();
}
});
}