我一直在兑现承诺,并且发现了一种奇怪的行为。为什么当我等待resolve
呼叫时却等待了这个承诺,而当我等待reject
呼叫时却没有等待呢?
(async () => {
let resolve, reject;
const promise = new Promise((_resolve, _reject) => {
resolve = _resolve;
reject = _reject;
});
promise.then(_ => console.log('Promise resolved'));
await resolve(); // Instead of "resolve(); await promise;", which would be more natural
console.log('Thread still running');
})()
(async () => {
let resolve, reject;
const promise = new Promise((_resolve, _reject) => {
resolve = _resolve;
reject = _reject;
});
await reject(); // Instead of "reject(); await promise;", which would be more natural
console.log('Thread still running');
})()
您只能有用地await
一个承诺。
resolve
返回undefined
。 reject
返回undefined
。这些都不是一个承诺,因此await
没有实际效果。
(async() => {
let resolve, reject;
const promise = new Promise((_resolve, _reject) => {
resolve = _resolve;
reject = _reject;
});
promise.then(_ => console.log('Promise 1 resolved'));
const resolve_return_value = resolve();
console.log({
resolve_return_value
});
await resolve_return_value;
console.log('Thread 1 still running');
})();
(async() => {
let resolve, reject;
const promise = new Promise((_resolve, _reject) => {
resolve = _resolve;
reject = _reject;
});
const reject_return_value = reject();
console.log({
reject_return_value
});
await reject_return_value;
console.log('Thread 2 still running');
})();
[当您将函数传递给Promise
构造函数时,会得到两个参数,它们是允许您解析或拒绝that promise的函数。
不要将它们与返回new的诺言立即被拒绝或解决的Promise.reject()
和Promise.resolve()
混淆。