【发布时间】:2019-06-21 16:45:54
【问题描述】:
我是 JavaScript 新手。我不知道哪里可以在一个承诺中使用两个拒绝;谁能告诉我在一个承诺中有两个拒绝是不好的做法?如果是,可选的解决方案是什么?
这是我的代码
async handler(ctx) {
/*
* sheet_to_json method converts excel file to JSON format
*/
let { s3Url, header } = ctx.params;
return new Promise((resolve, reject) => {
request({method: 'GET', uri: s3Url,encoding: null}, async function(err, res, data) {
if(err || res.statusCode !== 200) reject(err);
try{
const workbook = XLSX.read(data, {type:'buffer'});
const sheet_name_list = workbook.SheetNames;
let result = await XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]], {header});
resolve(result);
}
catch(error){
reject("Invalid File Cointaint");
}
})
});
}
【问题讨论】:
-
只有第一个拒绝才会做任何事情。一旦 Promise 被拒绝,它就不能被拒绝或再次解决(再次调用
reject或resolve是无害的,但什么也不做);它永久处于拒绝状态。您可能应该提前返回:return reject(err);,以便在您拒绝后其余代码不会在函数中运行。
标签: javascript node.js ecmascript-6 es6-promise