JavaScript 解决异步顺序执行问题

开始用 for 循环异步调用数据的时候,发现异步的执行时在 for 循环后面执行。当然获取的结果也不是我想要的。

一般这种情况:我们可以通过下面方法解决

1、JQuery $ajax

设置ajax参数async为false,即与js同步,默认是true(异步).

for(int i = 0 ; i < 5 ; i++){

var html= $.ajax({url: url,async: false}).responseText;

}

2、可以利用递归的方法实现,当异步执行完成后在调用自身的函数

$scope.goodsList = [];

function getProducts(nameIndex){

//                for(var i=0;i<name.length;i++){        //原来 for 循环写法获取的数据排序不固定

var product = new AV.Query(‘Product‘);

//商品类型

var Cid = new AV.Query(‘Classify‘);

Cid.equalTo("gjz", name[nameIndex]);

Cid.find().then(function(res){

product.equalTo("cid",  parseInt(res[0].id));

product.equalTo("status", 1);

product.descending("updatedAt");

product.limit(4);

var results = [];

//查询商品

product.find().then(function(res2) {

angular.forEach(res2, function (result, index) {

var oo = result.toJSON();

oo.picurlarray = angular.fromJson(oo.picurlarray);

oo.activeName = res[0].toJSON().title;

oo.activeNameEN = res[0].toJSON().gjz;

for(var key in oo.spec){

$scope.$apply(function() {

oo.product = oo.spec[key];

results.push(oo);

});

break;

}

});

$scope.goodsList.push(results);

console.log($scope.goodsList);

/*

*利用递归实现异步数据执行后再调用自身函数

*/

nameIndex++;

if(nameIndex<name.length)

getProducts(nameIndex);

else

return;

});

});

//                }

}

//果然推荐、果然热卖、积分商品、果然好礼、果然特价

var name = ["grtj","grrm","jfsp","grhl","grtjia"];

var nameIndex = 0;

getProducts(nameIndex);

时间: 2024-08-24 10:19:13

JavaScript 解决异步顺序执行问题的相关文章

100 事件 [IE8] 用数组来保存传统事件 通过数组来实现按顺序执行

这一节,我们来解决IE顺序执行的问题 //demo.html <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="tool.js"></script> &l

详解如何构建Promise队列实现异步函数顺序执行

场景 有a.b.c三个异步任务,要求必须先执行a,再执行b,最后执行c 且下一次任务必须要拿到上一次任务执行的结果,才能做操作 思路 我们需要实现一个队列,将这些异步函数添加进队列并且管理它们的执行,队列具有First In First Out的特性,也就是先添加进去的会被先执行,接着才会执行下一个(注意跟栈作区别) 大家也可以类比一下jQuery的animate方法,添加多个动画也会按顺序执行 解决 模拟3个异步函数 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

js异步之间执行的顺序

今天同事问了一个问题,怎么让ajax中的回调(保持异步)先执行,再让普通的function执行... 整了个解决办法: 如下: <!DOCTYPE html> <html> <head> <title>lhy1</title> </head> <body> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"><

Functions类,一个Javascript的函数加法类,将两个函数加起来,顺序执行

以下是类的代码: 1 var Functions = { 2 oFunctions: null, 3 add: function (oFunc, oNewFunc) { 4 var oNew = function () { 5 oFunc(); 6 oNewFunc(); 7 }; 8 return oNew; 9 } 10 }; 以下是测试代码: 1 function one() { 2 alert(1); 3 } 4 5 function two() { 6 alert(2); 7 } 8

javascript运行机制之执行顺序详解

JavaScript是怎么来进行解析的吗?它的执行顺序又是如何的呢?在了解这些之前,我们先来认识几个重要的术语: 1.代码块 JavaScript中的代码块是指由<script>标签分割的代码段.例如: <script type="text/javascript"> alert("这是代码块一"); </script> <script type="text/javascript"> alert(&q

javascript运行机制之执行顺序

前言 JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行.如果你不能理解javaScript语言的运行机制,或者简单地说,你不能掌握javascript的执行顺序,那你就犹如伯乐驾驭不了千里马,让千里马脱缰而出,四处乱窜. 那么JavaScript是怎么来进行解析的吗?它的执行顺序又是如何的呢?在了解这些之前,我们先来认识几个重要的术语: 代码块 JavaScript中的代码块是指由<script>标签分割

浏览器中的 JavaScript执行机制:07 | 变量提升:JavaScript代码是按顺序执行的吗?

前言:该篇说明:请见 说明 —— 浏览器工作原理与实践 目录 讲解完宏观视角下的浏览器后,从这篇文章开始,我们就进入下一个新的模块了,这里我会对 JavaScript 执行原理做深入介绍. 今天在该模块的第一篇文章,我们主要讲解执行上下文相关的内容.那为什么先讲执行上下文呢?它这么重要吗?可以这么说,只有理解了 JavaScript 的执行上下文,你才能更好地理解 JavaScript 语言本身,比如变量提升.作用域和闭包等.不仅如此,理解执行上下文和调用栈的概念还能助你成为一名更合格的前端开发

JS: javascript 点击事件执行两次js问题 ,解决jquery绑定click事件出现点击一次执行两次问题

javascript 点击事件执行两次js问题 在JQuery中存在unbind()方法,先解绑再添加点击事件,解决方案为: $(".m-layout-setting").unbind('click').click(function(){ //此处填写逻辑代码 }) ------ 因为利用js在页面加载后添加需要点击事件的代码,发现在点击后会代码会执行两次,因为有toggle效果,导致弹窗出现又很快丢失 查了一些资料,发现这是冒泡的原因,需要在点击事件代码中加入阻止冒泡的方法: e.s

按照顺序执行异步ajax的回调函数

//按顺序执行多个ajax命令,因为数量不定,所以采用递归 function send(action, arg2) { //将多个命令按顺序封装成数组对象,递归执行 //利用了deferred对象控制回调函数的特点 $.when(send_action(action[0], arg2)) .done(function () { //前一个ajax回调函数完毕之后判断队列长度 if (action.length > 1) { //队列长度大于1,则弹出第一个,继续递归执行该队列 action.sh