如何让代码在调用Ajax等异步调用时等待
How to make code wait while calling asynchronous calls like Ajax
我正在寻找这样的东西
function someFunc() {
callAjaxfunc(); //may have multiple ajax calls in this function
someWait(); // some code which waits until async calls complete
console.log('Pass2');
}
function callAjaxfunc() {
//All ajax calls called here
console.log('Pass1');
}
我试过了吗?
1Jquery.when ()
尝试使用它…它工作得很好。但不是我想要的方式。$.when
将等待,但$.when()
旁边的代码运行时没有等待。do callback
中的代码仅在ajax调用
2。setTimeOut()带有全局标志
我很有信心这将工作。
GlobalFlag = false;
function someFunc()
callAjaxfunc(); //may have multiple ajax calls in this function
setTimeOut(waitFunc, 100); // some which waits until async calls complete
console.log('Pass2');
}
function callAjaxfunc() {
//All ajax calls called here
onAjaxSuccess: function() {
GlobalFlag = true;
};
console.log('Pass1');
}
function waitFunc() {
if (!GlobalFlag) {
setTimeOut(waitFunc, 100);
}
}
仍然不能得到想要的结果。我做错什么了吗?不是这样吗?
我想要的结果是这样的
Pass1
Pass2
不能做任何摆弄,因为它需要AJAX调用
EDIT:正如许多人建议回调…我知道他们…但是somewait()
旁边的代码仍然会被执行…我希望浏览器完全停止执行代码旁边的somewait()
,直到ajax调用..这也可能是一个不好的做法,但值得知道和尝试,如果可能的话…
使用回调。这样的东西应该基于您的示例代码工作。
function someFunc() {
callAjaxfunc(function() {
console.log('Pass2');
});
}
function callAjaxfunc(callback) {
//All ajax calls called here
onAjaxSuccess: function() {
callback();
};
console.log('Pass1');
}
这将立即打印Pass1
(假设ajax请求至少需要几微秒),然后在执行onAjaxSuccess
时打印Pass2
。
为什么使用Deferred Objects
不能工作?除非我误解了什么,否则这可能对你有用。
/* AJAX success handler */
var echo = function() {
console.log('Pass1');
};
var pass = function() {
$.when(
/* AJAX requests */
$.post("/echo/json/", { delay: 1 }, echo),
$.post("/echo/json/", { delay: 2 }, echo),
$.post("/echo/json/", { delay: 3 }, echo)
).then(function() {
/* Run after all AJAX */
console.log('Pass2');
});
};
看这里
更新
根据你的输入,似乎你最快的选择是使用同步请求。您可以在$.ajax
请求中设置属性async
为false
,以使它们阻塞。这将挂起浏览器,直到请求完成。
请注意,我不建议这样做,我仍然认为你应该在基于事件的工作流中修复你的代码,而不是依赖于它
真正的程序员使用信号量。
将变量设置为0
。在每次AJAX调用之前增加它。在每个成功处理程序中递减它,并测试0
。
如果您需要等待ajax调用完成,那么您所需要做的就是同步调用。
相关文章:
- jasmine 2-在jasmine指定的超时时间内未调用异步回调.DEFAULT_TIMEOUT_INTERVAL
- 递归调用异步函数
- Fine Uploader S3-无处安全调用异步“;setUploadSuccessParams()"
- 调用异步函数的循环
- 从视图调用异步加载模块函数
- 在循环中调用异步函数
- JavaScript ES6 承诺在 while 循环中调用异步操作
- 并行调用异步/等待函数
- 解析云代码:如何调用异步保存的承诺
- 量角器根据条件单击嵌套元素,错误 - 在指定的超时内未调用异步回调
- 反应组件调用了两次(AJAX调用异步)
- 使用 ajax 调用异步 Web api 方法
- NodeJS:调用异步函数时谁做异步工作
- 调用异步函数 befrore 服务器开始侦听
- Node JS 动态集合 ajax 调用异步等待
- 页面重定向后调用异步成功函数
- 如何在调用异步Web服务响应时将值设置为数组
- 如何在node.js可读流中调用异步函数
- 在nodejs中,是否有更好的设计模式来同步调用异步函数
- 同步调用异步 JavaScript 函数