1 回答

TA貢獻(xiàn)1155條經(jīng)驗 獲得超0個贊
我有一系列的承諾,我正試圖用Promise.all().
Promise.all不解決承諾(或者我認(rèn)為你的意思是在這種情況下解決1)。它允許您觀察promises 被結(jié)算的結(jié)果。這不會讓他們安定下來。
您的setTenants函數(shù)返回一個承諾。要使用其實現(xiàn)值,您必須使用.then或await(在async函數(shù)中)。請記住,截至 whensetTenants返回其承諾,已啟動的操作可能尚未完成。
所以
setTenants(/*...*/)
.then(results => {
// use results...
})
.catch(error => {
// handle/report error
});
或者,在async
函數(shù)中:
const results = await setTenants(/*...*/);
(也許用try
/catch
來處理拒絕,盡管通常您只想讓它傳播到調(diào)用者并在那里處理它。)
旁注:then
此代碼中的回調(diào)毫無意義:
return Promise.all(promises).then(res => { return res })
它應(yīng)該只是:
return Promise.all(promises);
1 一些承諾術(shù)語:
fulfill - 將 promise 狀態(tài)從pending更改為fulfilled并具有特定的fulfillment 值
reject - 將 promise 狀態(tài)從pending更改為rejected并給出特定的拒絕原因
resolve - 直接(通過履行或拒絕)或間接(通過使其結(jié)果取決于另一個承諾的結(jié)果)來確定承諾的最終結(jié)果
重要的是要認(rèn)識到,如果一個已解決的承諾已解決為另一個承諾并且另一個承諾處于待定狀態(tài),則該承諾仍將處于待定狀態(tài)。
這是一個例子:
const p1 = new Promise(resolve => {
setTimeout(resolve, 800, 42);
});
// This could also be written: `const p2 = Promise.resolve(p1);`
const p2 = new Promise(resolve => {
resolve(p1);
});
// At this point, both `p1` and `p2` are *pending*; `p2` is *resolved to*
// `p1`, but neither `p1` nor `p2` is *settled* yet
p2
.then(value => {
// At this point, `p2` is *fulfilled* (one of the two kinds of *settled*)
console.log(value);
})
.catch(error => {
// At this point, `p2` is *rejected* (one of the two kinds of *settled*)
console.error(error);
});
添加回答
舉報