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 */); 

它没有通过承诺本身,而是通过了resolverejectfunction。 所以,依赖性恰恰相反。

这是一个基本实现,可以按原样保留您的应用程序流。

不要在现实生活中使用它 – 你会错过投掷安全性(感谢@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); } } };