关于';待定';和';履行';javascript异步函数的承诺
有什么不同关于';待定';和';履行';javascript异步函数的承诺,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,有什么不同 我什么时候应该在异步函数中使用“return new Promise(…”?为什么?您不应该在另一个Promise或异步函数中显式地构造承诺,这就是问题所在。它只会增加额外的开销,而不会带来任何好处。如果您确实需要承诺构造函数(用于包装回调API),则环绕函数不应是异步的,只需返回承诺即可。这与 async function pending() { return new Promise((resolve, reject) => { resolve(1) }); } as
我什么时候应该在异步函数中使用“return new Promise(…”?为什么?您不应该在另一个Promise或异步函数中显式地构造承诺,这就是问题所在。它只会增加额外的开销,而不会带来任何好处。如果您确实需要承诺构造函数(用于包装回调API),则环绕函数不应是异步的,只需返回承诺即可。这与
async function pending() {
return new Promise((resolve, reject) => { resolve(1) });
}
async function fulfilled() {
return 1;
}
function promiseState(p) {
return Promise.race([ Promise.resolve(p).then(() => "fulfilled", () => "rejected"), Promise.resolve().then(() => "pending") ]);
}
promiseState(pending()).then(s => { console.log(s); }); // pending
promiseState(fulfilled()).then(s => { console.log(s); }); // fulfilled
pending().then(r => { console.log(r); }); // 1
fulfilled().then(r => { console.log(r); }); // 1
及
前者只需要更长的时间就能解决
什么时候应该在异步函数中使用“returnnewpromise(…”
可能永远不会。看看吧
function pending() {
return Promise.resolve(Promise.resolve(1));
}
function fulfilled() {
return Promise.resolve(1);
}