Ich bin heute auf eine Interviewfrage gestoßen: Wenn es auf der Seite zwei asynchrone Ajax-Operationen gibt, weil die Ausführungsreihenfolge dieser beiden asynchronen Operationen nicht sicher ist, wie kann ich eine neue Operation ausführen, nachdem beide Operationen ausgeführt wurden? ist die Methode?
Ich habe damals Methode eins beantwortet: Verschachteln Sie zwei Ajaxe und führen Sie neue Operationen in der Rückgabefunktion des zweiten Ajaxes aus. Antwort des Interviewers: Diese Methode ist zu lahm.
Also dachte ich über die zweite Antwort nach: Überwachen Sie lokale Variablen über den Timer setTimeout und stellen Sie sicher, dass die beiden asynchronen Vorgänge abgeschlossen sind, bevor Sie einen neuen Vorgang ausführen. Antwort des Interviewers: Die Leistung dieser Methode ist nicht gut. Können Sie sich eine einfachere und vernünftigere Methode vorstellen?
Ich habe damals nicht darüber nachgedacht
Also habe ich diese Frage gestellt, um herauszufinden, was der beste Weg ist? Willkommen zur Diskussion und Beratung
1.Promise 包装异步ajax操作,
2.定义async 函数,
3.用await等待promise数据异步获取完成
这一种方法简洁高效,下面请看我专门给你写的示例代码
我懒得用ajax获取数据了,就用settimeout这个函数模拟获取数据吧,这个函数是异步的,原理效果一样。
http://api.jquery.com/jQuery....
目前浏览器环境中开箱即用的原生方法是 Promise.all。
以调用我的地图库 Sinomap Demo 为例,这个页面中为了加载一张地图,需要多个同时发起但不能确保返回顺序的请求:
中国地形数据
各省份数值 JSON 数据
多种图表叠加时多种图表存在多种 JSON 数据需通过不同数据接口返回……
解决方法直接在未打包的
http://sinomap.ewind.us/demo/demo.js
中,示例:这样通过 Promise 不仅实现了回调逻辑的解耦,还实现了基础的异步流程控制。
刚刚看到jquery 的 when 方法,所以给你重写了一个,不一定有jquery的那么好,但至少能实现效果了,可以在控制台直接输入下述代码试试,我勒个去,写了我整整半小时。。
问下能不能用jQ,能用的话直接:
顺带给个$.when的文档参考
我觉得是Promise的方法 all还是什么的
你的问题是有三件事 a,b,c。c要在a和b结束之后再执行。
有很多方法: 比如你说的嵌套法 还有暴力监听法
这个问题我曾经考虑过,以下是我的解答。
异步发射器
用数组保存如何执行异步操作
注意里面的函数都有个参数 commit ,它是一个函数 用来回传值。 当ajax成功的时候 把返回值回传进去就好
编写发射器
processors 是 todos 这样的数据。 cb 是最终回调。
并发他们
执行异步发射器 并提供
最终回调
Link
https://eczn.coding.me/blog/%...
可以定义个变量a=0,ajax请求成功后在回调里设置a++;
然后在两个回调中均判断下a==2 执行操作函数
设置两个flag,然后两个ajax调用同一个回调,在这个回调中判断两个flag都为true才执行后续操作。
把ajax写在另一个ajax里面再在回调那里执行