关于';待定';和';履行';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);
}