根據JQuery docs,當 DOM 物件變得可以安全操作(又名“準備就緒”)時執行代碼的“推薦”語法是這種語法:
$(function() {
// Handler for .ready() called.
});
JQuery 檔案沒有提到 JQuery 對函式提供的回傳值(如果有的話)做了什么。這讓我想到了我的問題:我想await
在我的職能中做出承諾。有什么原因我不能用 requiredasync
關鍵字裝飾函式,如下所示:
$(async function() {
await someFuncThatReturnsAPromise();
});
根據關于該主題的優秀 JavaScript.info 教程,await
關鍵字導致函式回傳已決議的promise
物件。如果 JQuery 不關心函式結果,那么函式回傳promise
物件的事實應該(希望)對底層的“呼叫頁面就緒處理程式”JQuery 行為沒有影響。
uj5u.com熱心網友回復:
它實際上并沒有對回傳的值做任何事情,即使它是一個 Promise - 因此,這是一個問題,因為如果 Promise 拒絕,您將得到一個未處理的拒絕:
$(async function() {
await Promise.reject();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
(具體來說,回呼會發生什么 - 它作為.then
處理程式添加到 internal readyList
,雖然有一個.catch
鏈接到它,但它只會重新拋出回傳的值。)
var readyList = jQuery.Deferred();
jQuery.fn.ready = function (fn) {
readyList
.then(fn)
// Wrap jQuery.readyException in a function so that the lookup
// happens at the time of error handling instead of callback
// registration.
.catch(function (error) {
jQuery.readyException(error);
});
return this;
};
如果異步函式從不拒絕,那么
$(async function() {
await someFuncThatReturnsAPromise();
});
很好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/496202.html
標籤:javascript jQuery 承诺
上一篇:獲取陣列長度并推入每個物件