微信小程序页面模板_Javascript异步执行不按顺序解决方案

  • 栏目:行业动态 时间:2021-01-05 14:37 分享新闻到:
<返回列表

Javascript异步执行不按顺序解决方案       这篇文章主要介绍了Javascript异步执行不按顺序解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

案例分析:

比如执行懒加载时候,onscroll 事件触发多次事件时候会调用多次 ajax 回调事件,由于每个事件返回先后次序并不能保证和触发前一致,所以在数据响应返回后所添加的数据顺序就很在 push 到数组上顺序不一致。

例子1:

var res = [];
 function response(data) {
 res.push( data );
// ajax(..)是某个库中提供的某个Ajax函数 
ajax( "/some.url.2", response );

这里的并发“进程”是这两个用来处理 Ajax 响应的 response() 调用。它们可能以任意顺 序运行。

我们假定期望的行为是 res[0] 中放调用 "/some.url.2" 的结果。有时候可能是这样,但有时候却恰好相反,这要视哪个调 用先完成而定。

这种不确定性很有可能就是一个竞态条件 bug。

解决办法

var res = [];
function response(data) {
 if (data.url == "/some.url.2") {
 res[1] = data;
// ajax(..)是某个库中提供的某个Ajax函数 
ajax( "/some.url.2", response );

不管哪一个 Ajax 响应先返回,我们都要通过查看 data.url(当然,假定从服务器总会返 回一个!)判断应该把响应数据放在 res 数组中的什么位置上。res[0] 总是包含 "/some.url.2" 的结果。通过简单的协调,就 避免了竞态条件引起的不确定性。

例子2:

var a, b;
 function foo(x) {
 a = x * 2;
 baz(); 
 function bar(y) {
 b = y * 2;
 baz(); 
 function baz() {
 console.log(a + b);
// ajax(..)是某个库中的某个Ajax函数 
ajax( "/some.url.2", bar );

在这个例子中,无论 foo() 和 bar() 哪一个先被触发,总会使 baz() 过早运行(a 或者 b 仍处 于未定义状态);但对 baz() 的第二次调用就没有问题,因为这时候 a 和 b 都已经可用了。

要解决这个问题有多种方法。这里给出了一种简单方法:

var a, b;
function foo(x) {
 a = x * 2;
 if (a b) {
 baz();
function bar(y) {
 b = y * 2;
 if (a b) {
 baz();
function baz() {
 console.log( a + b );
// ajax(..)是某个库中的某个Ajax函数 
ajax( "/some.url.2", bar );

包裹baz()调用的条件判断if (a b)传统上称为门(gate),我们虽然不能确定a和b 到达的顺序,但是会等到它们两个都准备好再进一步打开门(调用 baz())。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持凡科。


分享新闻到:

更多阅读

微信小程序页面模板_Javascript异步执行不

行业动态 2021-01-05
Javascript多线程实行不按序处理计划方案 本文关键详细介绍了Javascript多线程实行不按序处...
查看全文

广州凡科互联网科技股份有限公司招聘企

行业动态 2021-01-05
招聘人数:13职位信息岗位职责:1、负责公司企业文化活动方案策划并组织实施,定期组织各...
查看全文

湛江市网站建设难-高端男装网站商城

行业动态 2021-01-05
4006-3721-06 / 服装服饰网页页面模版包含服装品牌网页页面模版、质量休闲男装、高档服饰、服...
查看全文
返回全部新闻


区域站点: 南丰县微信h5小游戏   南宫市手机软件制作教程   囊谦县手机网站自助建站   南和县h5小游戏制作平台   南华县微信h5小游戏   南江县手机软件制作教程   南京市手机网站自助建站   南靖县h5小游戏制作平台   南康市微信h5小游戏   南乐县手机软件制作教程   南陵县手机网站自助建站   南宁市h5小游戏制作平台   南平市微信h5小游戏   南皮县手机软件制作教程   南市区手机网站自助建站   南通市h5小游戏制作平台   南投县微信h5小游戏   南雄市手机软件制作教程   南溪县手机网站自助建站   南阳市h5小游戏制作平台   南漳县微信h5小游戏   南召县手机软件制作教程   南郑县手机网站自助建站   那坡县h5小游戏制作平台   那曲县微信h5小游戏   纳雍县手机软件制作教程   讷河市手机网站自助建站   内黄县h5小游戏制作平台   内江市微信h5小游戏   内丘县手机软件制作教程   内乡县手机网站自助建站   嫩江市h5小游戏制作平台   聂荣县微信h5小游戏   尼玛县手机软件制作教程   尼木县手机网站自助建站   宁安市h5小游戏制作平台   宁波市微信h5小游戏   宁城县手机软件制作教程   宁德市手机网站自助建站   宁都县h5小游戏制作平台   宁国市微信h5小游戏   宁海县手机软件制作教程   宁化县手机网站自助建站   宁晋县h5小游戏制作平台   宁陵县微信h5小游戏   宁明县手机软件制作教程   宁南县手机网站自助建站   宁强县h5小游戏制作平台   宁陕县微信h5小游戏   宁武县手机软件制作教程   宁乡市手机网站自助建站   宁阳县h5小游戏制作平台   宁远县微信h5小游戏   农安县手机软件制作教程   磐安县手机网站自助建站   盘锦市h5小游戏制作平台   盘山县微信h5小游戏   磐石市手机软件制作教程   盘州市手机网站自助建站   蓬安县h5小游戏制作平台   澎湖县微信h5小游戏   蓬莱市手机软件制作教程   彭山县手机网站自助建站   蓬溪县h5小游戏制作平台   彭阳县微信h5小游戏   彭泽县手机软件制作教程   彭州市手机网站自助建站   偏关县h5小游戏制作平台   平安县微信h5小游戏   平昌县手机软件制作教程   平定县手机网站自助建站   屏东县h5小游戏制作平台   平度市微信h5小游戏   平果县手机软件制作教程   平和县手机网站自助建站   平湖市h5小游戏制作平台   平江县微信h5小游戏   平乐县手机软件制作教程   平凉市手机网站自助建站   平利县h5小游戏制作平台   平罗县微信h5小游戏   平陆县手机软件制作教程   屏南县手机网站自助建站   平泉市h5小游戏制作平台   屏山县微信h5小游戏   平顺县手机软件制作教程   平塘县手机网站自助建站   平潭县h5小游戏制作平台   平武县微信h5小游戏   萍乡市手机软件制作教程   平乡县手机网站自助建站   平阳县h5小游戏制作平台   平遥县微信h5小游戏   平阴县手机软件制作教程   平邑县手机网站自助建站   平远县h5小游戏制作平台   平舆县微信h5小游戏   皮山县手机软件制作教程   普安县手机网站自助建站   浦北县h5小游戏制作平台   浦城县微信h5小游戏   普洱市手机软件制作教程   普格县手机网站自助建站   浦江县h5小游戏制作平台   普兰县微信h5小游戏   普宁市手机软件制作教程   莆田市手机网站自助建站   迁安市h5小游戏制作平台   乾安县微信h5小游戏   潜江市手机软件制作教程   潜山市手机网站自助建站  

友情链接: 免费建站的平台 网页设计自我介绍 自助建站 搭建网站基本步骤

Copyright © 2002-2020 手机网站自助建站_h5小游戏制作平台_微信h5小游戏_手机软件制作教程_抽奖h5 版权所有 (网站地图) 备案号:粤ICP备10235580号