javascript - js最好怎么在两个AJax异步操作之后执行一个新的操作
世界只因有你
世界只因有你 2017-07-05 10:54:02
[JavaScript讨论组]

今天碰到一个面试问题,就是如果页面中有两个异步ajax的操作,因为不确定这两个异步操作的执行顺序,怎么在这两个操作都执行完再执行一个新的操作,最好的方法是什么?

我当时回答了方法一:嵌套两个ajax,在第二个ajax的返回函数中执行新的操作。面试官回复:这种方法太矬了。

于是想了下回答方法二:通过定时器setTimeout监听局部变量,确保两个异步操作执行完了再执行新操作。 面试官回复:这种方式性能不好,能不能想到一个简单又更合理的方法。

当时思考未果
所以把这个问题放上来寻求最好的方法是什么?欢迎讨论指点

世界只因有你
世界只因有你

全部回复(7)
学习ing

1.Promise 包装异步ajax操作,
2.定义async 函数,
3.用await等待promise数据异步获取完成
这一种方法简洁高效,下面请看我专门给你写的示例代码
我懒得用ajax获取数据了,就用settimeout这个函数模拟获取数据吧,这个函数是异步的,原理效果一样。

//模拟ajax异步操作1
function ajax1() {
    const p = new Promise((resolve, reject) => {
        setTimeout(function() {
            resolve('ajax 1 has be loaded!')
        }, 1000)
    })
    return p

}
//模拟ajax异步操作2
function ajax2() {
    const p = new Promise((resolve, reject) => {
        setTimeout(function() {
            resolve('ajax 2 has be loaded!')
        }, 2000)
    })
    return p
}
//等待两个ajax异步操作执行完了后执行的方法
const myFunction = async function() {
    const x = await ajax1()
    const y = await ajax2()
        //等待两个异步ajax请求同时执行完毕后打印出数据
    console.log(x, y)
}
myFunction()
给我你的怀抱

问下能不能用jQ,能用的话直接:

$.when($.ajax("page1"), $.ajax("page2")).done(function(){});

顺带给个$.when的文档参考

为情所困

我觉得是Promise的方法 all还是什么的

世界只因有你

可以定义个变量a=0,ajax请求成功后在回调里设置a++;
然后在两个回调中均判断下a==2 执行操作函数

天蓬老师

设置两个flag,然后两个ajax调用同一个回调,在这个回调中判断两个flag都为true才执行后续操作。

漂亮男人

把ajax写在另一个ajax里面再在回调那里执行

漂亮男人

如果简单点我选择用 vue 或者 angular 这类能双向绑定数据的 js 框架去搞这个事,各种回调太麻烦了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号