我想将一系列函数与它们的参数存储在一个数组中,然后顺序执行它们。我一直在使用这个问题:How to chain execution of array of functions when every function returns deferred.promise? 并对此问题的具体答案:http://plnkr.co/edit/UP0rhD?p=preview。如何将函数的参数存储在数组中并按顺序执行?
从我的理解,这可以用对象文字或数组来完成。我读过一些人们在数组中存储没有参数的函数的问题,但到目前为止还没有找到一个好的答案来将它们包含在参数中。
以下是我的尝试。我首先创建一个带参数的函数数组(现在用硬编码),然后将它们传递给ExecutePromiseChain()以供执行。从我看到的看起来,函数立即被调用,这是我不想要的。
Responses = [];
function BuildInventoryList(){
return new Promise(function(resolve, reject) {
f = [new CreateRequestWPromise(`https://${defaults.host}/inventory/88421`, {}),
new CreateRequestWPromise(`https://${defaults.host}/inventory/19357`,{})];
resolve(ExecutePromiseChain(f));
});
}
function ExecutePromiseChain(funcs){
var promise = funcs[0];
for (var i = 1; i < funcs.length; i++){
promise = promise.then(funcs[i]);
}
return promise;
}
请注意,我在回国承诺ExecutePromiseChain(),所以我可以链,它以后。
这是我promisified http请求功能:
function CreateRequestWPromise(url, body){
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.onload = function(){
if(xhr.status == 200){
Responses.push(JSON.parse(xhr.response));
resolve(xhr.responseText);
}
else{
reject(xhr.statusText);
}
}
xhr.onerror = function() {
reject(Error("Network Error"));
};
xhr.open("POST", url);
xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
var bodyS = JSON.stringify(body);
xhr.send(bodyS);
});
}
我调用这些函数在与程序的启动:
BuildInventoryList().then(CreateRequestWPromise(`https://${defaults.host}/inventory/update`,
Items));
那么愚蠢的错误,我在这里做?为什么我的函数不能按顺序执行?
由于可能很明显,我还在学习Javascript和承诺的绳索。我很欣赏的耐心和帮助:)
避免['Promise'构造反模式](https://stackoverflow.com/q/23803743/1048572?What -is最诺言建设,反模式和如何对避免-吧)! 'ExecutePromiseChain'已经返回一个promise,'BuildInventoryList'不应该使用'new Promise'。 – Bergi
你的'f'似乎是一组promise,而不是返回promise的函数。 – Bergi
'为什么我的函数不能顺序执行 - - 因为调用'CreateRequestWPromise'执行'XMLHttpRequest' –