Вы можете иметь несколько мест, которые вы называете reject(err)
внутри вашего обратного вызова обещания. Только первый исполнитель будет иметь значение. Последующие вызовы reject()
игнорируются, поскольку после установки состояния Promise его нельзя изменить при последующих вызовах reject()
или resolve()
.
.
Обычно хорошей практикой является завершение выполнения функции с помощью return
или использование оператора else
, когда вы отказываетесь, поскольку продолжать делать другие вещи, которые не собираются разрешать или отклонять, обычно бессмысленно, а в некоторых случаях дела вредные.
Итак, в вашем конкретном случае вы можете добавить return
, например:
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) return reject(err); // <==== return added here
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");
}
})
});
}
Или вы можете добавить еще:
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);
} else { // <======== else added here
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");
}
}
})
});
}