2 回答
TA贡献1966条经验 获得超4个赞
如果你跑
function get1() {
return new Promise((r)=>setTimeout(() => r(),3000))
}
function rejection() {/*Handle rejection*/}
function doAll(...ps) {
return Promise.all(ps.map(rejection))
}
(async () => {
var p1 = get1().then(()=>console.log("1"));
var p2 = get1().then(()=>console.log("2"));
Promise.all([p1, p2]).then(()=>{
console.log("3")
})
})()
那么结果是正确的
1
2
3
If you run
function get1() {
return new Promise((r)=>setTimeout(() => r(),3000))
}
function rejection() {/*Handle rejection*/}
function doAll(...ps) {
return Promise.all(ps)
}
(async () => {
var p1 = get1().then(()=>console.log("1"));
var p2 = get1().then(()=>console.log("2"));
doAll(p1, p2).then(()=>{
console.log("3")
})
})()
然后你又得到正确的
1
2
3
结果,问题出在ps.map(rejection). 让我们来看看:
function get1() {
return new Promise((r)=>setTimeout(() => r(),3000))
}
function rejection() {/*Handle rejection*/}
function doAll(...ps) {
console.log(ps);
console.log(ps.map(rejection));
return Promise.all(ps.map(rejection));
}
(async () => {
var p1 = get1().then(()=>console.log("1"));
var p2 = get1().then(()=>console.log("2"));
doAll(p1, p2).then(()=>{
console.log("3")
})
})()
输出
两个元素的数组,两者都是undefined
微不足道的评估。因为ps.map(rejection)
是一个箭头函数,它命名它的参数为 rejection 并且不返回任何东西。
TA贡献1804条经验 获得超8个赞
如果你想在 javascript 中使用异步操作,你可以使用 3 种方法。
打回来
承诺
异步/等待
为了实现您想要的确切内容,最好和优化的方法是使用 async/await 方法。
你可以这样做:
async function getAllData(){
const p1 = await promise1;
const p2 = await promise2;
}
现在 getAllData 返回 Promise,您可以使用 .then() 获取结果并使用 .catch() 获取错误。
添加回答
举报