javascript中的函数同步
function Synchronization in javascript
我在不同的js代码部分中有5个不同的ajax请求,只有一个处理程序:
ajaxRequest1
ajaxRequest2
ajaxRequest3
ajaxRequest4
ajaxRequest5
handler
我想实现以下订单:
如果我调用ajaxRequest1,我应该处理它,只有在它之后我才能发出下一个ajaxRequest。
例如,它是良好的订购:
start ajaxRequest1
start handler
start ajaxRequest2
start handler
start ajaxRequest3
start handler
start ajaxRequest4
start handler
start ajaxRequest5
start handler
但它很糟糕:
start ajaxRequest1
start ajaxRequest2
start ajaxRequest3
start handler
start handler
start ajaxRequest4
start handler
start handler
start ajaxRequest5
start handler
javascript允许实现它吗?
如果我理解正确,那么在运行某个程序之前,您需要等待某个条件变为true。如果是这样,这可以通过setTimeout
循环来实现。
function waitFor(fnReady, fnCallback) {
var check = function() {
if (fnReady()) {
fnCallback();
}
else {
setTimeout(check, 100); // wait another 100ms, and try again
}
};
check();
}
var result = 0;
function ajaxRequest1() {
$.ajax(...).done(
function() { result++; }
);
}
function ajaxRequest2() {
$.ajax(...).done(
function() { result++; }
);
}
waitFor(function() { return result === 1; }, ajaxRequest2);
waitFor(function() { return result === 2; }, ajaxRequest3);
听起来像是Deferred的工作。如果你使用的是jQuery,像这样的东西应该可以做你想要的:
function ajaxRequest1() {
var dfd = $.Deferred();
$.ajax(...)
.done(function(response) {
if (/*response is valid*/)
dfd.resolve(response);
else
dfd.reject();
});
.fail(function() {
dfd.reject();
});
return dfd.promise();
}
function ajaxRequest2(response1) {
// similar to ajaxRequest1, but with different URL, params
}
function ajaxRequest3(response2) {
// similar to ajaxRequest2, but with different URL, params
}
// Run the tasks sequentially
$.when(ajaxRequest1())
.then(ajaxRequest2)
.then(ajaxRequest3)
.done(function(result1, result2, result3) {
// all requests have completed
})
.fail(function() {
// handle error
});
这里,每个ajaxRequestX函数也是处理程序。它检查从上一个请求接收到的响应,如果一切正常,则启动下一个请求。查看jQuery的Deferred对象以了解更多信息。
相关文章:
- Chrome扩展和Angular:我可以把Chrome.runtime.sendMessage变成一个同步函数吗
- 将同步函数包装到承诺中的最佳方法是什么?
- javascript中同步函数执行中的问题
- 同步函数调用涉及post-json调用,其中一个函数应该在另一个函数成功后成功
- 如何从异步函数创建同步函数以实现向后兼容性
- 在 Node.js 中何时使用同步函数是否有约定
- JavaScript 中的同步函数
- 在 async.each 的帮助下调用 foreach 中的同步函数(带回调)
- 如何确保同步函数的执行发生在 3 个异步函数完全完成后
- AJAX / jQuery / etc.库之前的JavaScript同步函数 - 不记得实现,任何建议
- 在javascript中制作同步函数
- 使用Jquery$When进行异步和同步函数调用
- javascript中返回错误的纯同步函数
- 如何使与jquery延迟对象一起工作的函数表现得像同步函数
- 与异步和同步函数相关的未定义javascript函数的问题
- 在node.js中编写同步函数的简单方法
- Javascript同步函数-chrome扩展
- 如何在nodejs中同步函数调用
- 如何在angular js中同步函数命令
- 在JavaScript中的异步函数末尾运行同步函数