JavaScript本机Promise()没有回调
看看这个jQuery代码:
var promise = new Deferred(), some; some = function(promise) { // do cool things promise.resolve(); }; promise.then(/* callback cool things */); // init everything some(promise);
我不确定这种方法的架构正确性,但我用了很长时间,对我来说很方便。
在本机JavaScript中,我不能使用这种方法。 构造函数new Promise()
需要一个回调参数,所以我不能将Promise
实例作为参数传递。
所以我的问题是:我如何预定义JavaScript原生承诺,将其作为参数传递给函数和解决方案?
执行流程会有所不同,但基本上以相同的方式工作:
function some(resolve, reject) { resolve(); } var promise = new Promise(some); promise.then(/* callback cool things */);
它没有通过承诺本身,而是通过了resolve
和reject
function。 所以,依赖性恰恰相反。
这是一个基本实现,可以按原样保留您的应用程序流。
不要在现实生活中使用它 – 你会错过投掷安全性(感谢@BenjaminGruenbaum提示)。
var MyDeferred = function() { var _resolve, _reject, capturedPromise = new Promise(function(resolve, reject){ _resolve = resolve; _reject = reject; }); return { 'resolve' : _resolve, 'reject' : _reject, 'then' : function() { capturedPromise.then.apply(capturedPromise, arguments); }, 'catch' : function() { capturedPromise.catch.apply(capturedPromise, arguments); } } };