[英]How to stop processing continuing past a promise reject
我有異步代碼,我想在reject
時停止運行。
筆記:
let ingestPromises = event.Records.map(async (record, i) => {
let camera = JSON.parse(record.body)
return new Promise(async (resolve, reject) => {
let imageBuffer;
try {
imageBuffer = await retrieveImageFromURI(camera.ing_uri)
console.log(`Record #${i} Successful Ingestion from URI`);
} catch (err) {
console.log("Going to reject");
reject({ 'Task': `Attempting to pull image from camera (${camera.camName}`})
console.log("Rejected");
}
console.log("Going to save file now...");
// ... blah blah more code ...
})}
let settledPromises = await Promise.allSettled(ingestPromises)
console.log('All promises settled :>> ', settledPromises);
當我針對無效的 uri 運行它時, retrieveImageFromURI
function 按預期拋出超時錯誤。 這會跳過“Record X successful ingestion...”消息並按預期跳轉到 catch 塊。 然而,后來的事情go出乎意料。
Output 從上面的代碼中,當retrieveImageFromURI
拋出一個錯誤看起來像這樣:
Going to reject Rejected Going to save file now... All promises settled:>> [ { status: 'rejected', reason: { Task: 'Attempting to pull image from camera (TEST Camera)' } }]
我希望拒絕會停止 promise 內的任何進一步處理(就像返回一樣)並且我不會看到“被拒絕”或“現在要保存文件...”console.logs...
我在這里誤解了什么?
添加return
停止執行,因為reject
只是一個function,它不能讓function停止執行。
try {
// ...
} catch (err) {
console.log("Going to reject");
reject({
'Task': `Attempting to pull image from camera (${camera.camName}`
});
console.log("Rejected");
return;
}
如果你有一個finally
子句,你需要添加一個變量來跟蹤:
注意:這在這里沒有幫助,因為不管catch
是否發生, finally
都應該執行,但是如果你在catch
內部有額外的檢查, return
將 go 到finally
中,所以需要一個額外的變量。
let shouldReturn = false;
try {
// ...
} catch (err) {
console.log("Going to reject");
reject({
'Task': `Attempting to pull image from camera (${camera.camName}`
});
console.log("Rejected");
let shouldReturn = true;
return;
} finally {
if (shouldReturn) return;
}
調用 reject 沒有什么特別之處。 它只是一個 function。如果您想放棄進一步處理,您的 function 應該return
。
try {
imageBuffer = await retrieveImageFromURI(camera.ing_uri)
console.log(`Record #${i} Successful Ingestion from URI`);
} catch (err) {
console.log("Going to reject");
reject({ 'Task': `Attempting to pull image from camera (${camera.camName}`})
console.log("Rejected");
return;
}
我需要在提前解決/拒絕后返回嗎? 表示第一個reject
(或resolve
)將定義 Promise 的 fullfilled 值,但它們不會主動停止執行並且需要返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.