簡體   English   中英

遞延對象如何通知其承諾已解決?

[英]How deffered object notifies its promise that it has been resolved?

我的意思是,如果有一種方法可以通過延緩的對象通知其關於狀態更改的承諾,那么任何人都可以以相同的方式觸發附加到承諾的回調。 我想我在推理中遺漏了一些東西,但我無法弄清楚到底是什么。

jQuery的Deferred返回的保證無法訪問解析機制; Deferred 的解析機制確實可以訪問promise和/或其注冊的回調。

考慮:

 // AD object is a bit like a Deferred function D() { // All of these vars are private var state = "pending"; var resolvedValue = null; var callbacks = []; // This is our promise, which is private var p = { then: function(callback) { callbacks.push(callback); } }; // Accessor for our promise this.promise = function() { return p; }; // Resolver -- note the promise object doesn't // offer any access to this, just the D this.resolve = function(value) { if (state === "pending") { state = "resolved"; resolvedValue = value; // Note that the resolver has access to the callbacks // that the promise registers setTimeout(function() { callbacks.forEach(function(callback) { try { callback(resolvedValue); } catch (e) { } }); }, 0); } }; } // Usage var d = new D(); d.promise().then(function(value) { console.log("Got " + value); }); d.resolve("foo"); 

並不意味着是任何真正的Deferred實現,而只是說明了被延遲者如何訪問諾言,而諾言卻不能解決被延遲者。

您可以在源代碼中查看jQuery的Deferred的完整詳細信息。 但是請注意,jQuery的Deferred有點過時了。 如今,擁有兩個名稱分別為( Deferred vs. Promise )的對象已經過時了。 而是,JavaScript Promise對象接受一個初始化函數,並且初始化函數接收一個可用於解析承諾的解析器函數。 1


1 仍然涉及兩個對象:通過調用初始化程序創建的Promise和執行上下文,但這有點技術性...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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