簡體   English   中英

為什么我可以等待承諾解決執行,而不是承諾拒絕執行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM