我正在试验ES6的Promise,但我找不到任何替代方案来完成jQuery ajax中的承诺。我需要用"then“在所有注册的处理程序之后执行函数。
谢谢!
发布于 2015-12-22 08:51:07
正如Bergi所提到的,您需要的是disposer pattern。你对承诺的核心概念似乎有点偏离,我认为这让你更难推理。当您调用.then时,您并不是在概念上“附加一个处理程序”,而是在创建一个新的promise,根据定义,该promise将在其所有.then处理程序运行后解析。
基于如下代码给出了您的中心问题:
// a.js
module.exports = function(){
// Where 'Promise.resolve()' is a stand in for your ajax.
return Promise.resolve()
.then(function(){
// Want this to run after 'B'.
});
}
// b.js
var makePromise = require('./a');
module.exports = function specialMakePromise(){
return makePromise().then(function(){
// Should run first.
});
}它们总是以错误的顺序运行,因为根据定义,来自a.js的.then处理程序必须在来自b.js的.then处理程序之前运行和完成。
解决这个问题的一种方法是像这样组织你的代码:
// a.js
module.exports = function(callback){
return Promise.resolve()
.then(callback)
.then(function(){
// Want this to run after 'B'.
});
}
// b.js
var makePromise = require('./a');
module.exports = function specialMakePromise(){
return makePromise(function(){
// Should run first.
});
}https://stackoverflow.com/questions/34400740
复制相似问题