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
有什么不同?
我什么时候应该使用'返回新的Promise(...'在异步函数中?为什么?
答案 0 :(得分:1)
与
之间的区别相同function pending() {
return Promise.resolve(Promise.resolve(1));
}
和
function fulfilled() {
return Promise.resolve(1);
}
前者只需要更长的时间来解决问题。
我什么时候应该使用'返回新的Promise(...'在异步函数中?
可能永远不会。请参阅How to turn this callback into a promise using async/await?和What is the benefit of prepending async to a function that returns a promise?。
答案 1 :(得分:0)
你不应该在另一个Promise或async函数中明确地构造Promise,即promise constructor antipattern。它只是增加了额外的开销,你无论如何都没有任何好处。如果你真的需要Promise构造函数(用于包装回调API),那么周围的函数不应该是async
,只需返回promise。