[英]Why can I await a promise resolve execution, but not a promise reject one?
我一直在玩承諾,我發現了一種奇怪的行為。 為什么在我等待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
構造函數時,它會被賦予兩個參數,這些參數是允許您解析或拒絕該承諾的函數。
不要將它們與Promise.reject()
和Promise.resolve()
混淆,它們返回立即被拒絕或解決的新承諾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.