我正在使用供应商API来访问其服务。该服务作为jQuery延迟对象公开。对于一个完整的业务任务,我在伪代码中执行类似的操作。
service.do('reset').then( function ( result) {
return service.setValue(valObj);
}).then ( function (result) {
return service.do('runTask');
}).then ( function ( result ) {
return service.getResult(query);
}).then ( function (result){
console.log('finally done with One task');
});
每个service.XXX都是下面的REST API调用,回调函数会带回REST响应。我省略了为简单起见如何使用每个结果。
现在,我需要在单个业务任务中以严格的端到端顺序执行此服务100次。上面的代码需要执行100次:前一个代码完成然后开始下一个代码。
在javascript中构建此类需求的好方法是什么?我正在使用ReactJS和jQuery。
答案 0 :(得分:1)
如果你真的只想反复执行同样的事情,你可以把它放在一个函数中,并在链中的最后一步结束时调用该函数:
var cntr = 0;
function run() {
if (cntr++ > 1000) return;
service.do('reset').then( function ( result) {
service.setValue(valObj).then ( function (result) {
service.do('runTask').then ( function ( result ) {
service.getResult(query).then ( function (result){
console.log('finally done with One task');
run();
});
});
});
});
}
run();
仅供参考,你没有必要如此深入地嵌套东西。你可以像这样链接你的承诺:
var cntr = 0;
function run() {
if (cntr++ > 1000) return;
service.do('reset').then( function ( result) {
return service.setValue(valObj);
}).then ( function (result) {
return service.do('runTask');
}).then ( function ( result ) {
return service.getResult(query);
}).then ( function (result){
console.log('finally done with One task');
run();
});
}
run();
答案 1 :(得分:0)
尝试使用相同的递归函数
(function tasks(n, complete) {
return n < complete ? Promise.resolve("a").then(function(result) {
return Promise.resolve(result + "b").then(function(result) {
return Promise.resolve(result + "c").then(function(result) {
return Promise.resolve(result + "d").then(function(result) {
console.log("finally done with " + n + " task", result + "" + n);
}).then(tasks.bind(null, n+1, complete));
});
});
}) : console.log("complete", n, complete)
}(0, 100))
答案 2 :(得分:-2)
尝试以下方法:
var i = 100;
window.running = false;
while (i > 0 && !window.running) {
window.running = true;
i--;
service.do('reset').then( function ( result) {
service.setValue(valObj).then ( function (result) {
service.do('runTask').then ( function ( result ) {
service.getResult(query).then ( function (result){
//...
window.running = false;
});
});
});
});
}