我正在學習 Javascript 中的承諾,當我將 Promise.all 方法用于未定義的值時,“then”塊正在執行。任何人都可以在這方面幫助我列印未定義值的 catch 塊嗎?
let promise1, promise2, promise3, totalPromises;
totalPromises = () => {
return Promise.all([promise1, promise2, promise3])
.then(() => console.log("All promises are resolved"))
.catch(() => console.log("All promises are not resolved"))
}
totalPromises();
輸出:所有承諾都已解決
uj5u.com熱心網友回復:
當傳遞給的陣列Promise.all具有不是 Promise 物件(或 thenables)的值時,它們將被包裝到 Promise 中,就像使用Promise.resolve(value). 如果您不希望特定值出現這種行為,那么您必須撰寫代碼來嵌入您想要的行為。
例如,下面的toPromise函式將在其引數為 時回傳一個被拒絕的承諾物件undefined,并將使用 將任何其他非承諾值包裝到一個 Promise 物件中Promise.resolve。
您可以在將陣列傳遞給之前通過該函式映射陣列Promise.all:
function toPromise(arg) {
return arg === undefined ? Promise.reject("value is undefined")
: arg instanceof Promise ? arg
: Promise.resolve(arg) ;
}
let promise1, promise2, promise3, totalPromises;
totalPromises = () => {
return Promise.all([promise1, promise2, promise3].map(toPromise))
.then(() => console.log("All promises are resolved"))
.catch(() => console.log("Not all promises are resolved"))
}
totalPromises();
現在,也許您想在某個值null或其他一些不需要的值時擴展此行為。
uj5u.com熱心網友回復:
這是Promise.all FulfillmentPromise.all 的檔案中已經定義的正常行為
如果傳遞了一個非空的可迭代物件,并且所有的承諾都履行了,或者不是承諾,那么這個方法回傳的承諾將異步履行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/395769.html
上一篇:在函式中回傳“typeof”值?
