我如何存储 Promise 而不是 Deferred
How can i store Promise instead of Deferred
我有一段代码,它通过调度带有回调 ID 的请求并在数组中存储 Deferred
来与 iOS 本机层通信。那么当回调来的时候,我们就可以解决或者拒绝这个Deferred
.
我的代码:
jsGate = (function () {
function jsGate() {}
jsGate._messageCount = 0;
jsGate._callbackDeferreds = {};
jsGate.dispatch = function (plugin, method, args) {
var callbackID, d, message;
callbackID = this._messageCount;
message = {
plugin: plugin,
method: method,
"arguments": args,
callbackID: callbackID
};
send(message)
this._messageCount++;
d = new Deferred;
this._callbackDeferreds[callbackID] = d;
return d.promise;
};
jsGate.callBack = function (callbackID, isSuccess, valueOrReason) {
var d;
d = this._callbackDeferreds[callbackID];
if (isSuccess) {
d.resolve(valueOrReason[0]);
} else {
d.reject(valueOrReason[0]);
}
return delete this._callbackDeferreds[callbackID];
};
return jsGate;
})();
使用示例:
jsGate.dispatch("ReadLater", "fetchSomething", []).then(function (value) {
return console.log(value);
});
return jsGate.dispatch("ReadLater", "asyncError", []).then(function (value) {
return console.log(value);
}, function (reason) {
return console.log("Failed: " + reason);
});
使用 A+ Promises 的最佳实践是什么?
经过长时间的研究:没有奇怪的技巧就没有干净的方法可以做到这一点。 Deferred
和 Promise
之间的主要区别是我们不能从外部操纵 Promise
结果。总的来说 - 这是一个很好的方法,但在这种特定情况下,我们需要该功能,所以 - 我们必须坚持使用 Deferred
。
我有一段代码,它通过调度带有回调 ID 的请求并在数组中存储 Deferred
来与 iOS 本机层通信。那么当回调来的时候,我们就可以解决或者拒绝这个Deferred
.
我的代码:
jsGate = (function () {
function jsGate() {}
jsGate._messageCount = 0;
jsGate._callbackDeferreds = {};
jsGate.dispatch = function (plugin, method, args) {
var callbackID, d, message;
callbackID = this._messageCount;
message = {
plugin: plugin,
method: method,
"arguments": args,
callbackID: callbackID
};
send(message)
this._messageCount++;
d = new Deferred;
this._callbackDeferreds[callbackID] = d;
return d.promise;
};
jsGate.callBack = function (callbackID, isSuccess, valueOrReason) {
var d;
d = this._callbackDeferreds[callbackID];
if (isSuccess) {
d.resolve(valueOrReason[0]);
} else {
d.reject(valueOrReason[0]);
}
return delete this._callbackDeferreds[callbackID];
};
return jsGate;
})();
使用示例:
jsGate.dispatch("ReadLater", "fetchSomething", []).then(function (value) {
return console.log(value);
});
return jsGate.dispatch("ReadLater", "asyncError", []).then(function (value) {
return console.log(value);
}, function (reason) {
return console.log("Failed: " + reason);
});
使用 A+ Promises 的最佳实践是什么?
经过长时间的研究:没有奇怪的技巧就没有干净的方法可以做到这一点。 Deferred
和 Promise
之间的主要区别是我们不能从外部操纵 Promise
结果。总的来说 - 这是一个很好的方法,但在这种特定情况下,我们需要该功能,所以 - 我们必须坚持使用 Deferred
。