JavaScript实现串行请求的示例代码

这篇文章主要介绍了JavaScript实现串行请求的示例代码,帮助大家更好的理解和使用JavaScript,感兴趣的朋友可以了解下

使用async和await

var fn = async function(promiseArr) {
 for(let i = 0,len = arr.length; i<len; i++) {
  currentPromise = (promiseArr[i] instanceOf Promise) ? promiseArr[i] : Promise.resolve(promiseArr[i]);
  var result = await currentPromise;
  console.log(result)
 }
 }
 fn(arr)

Promise实现

依照 promises 规范,一旦一个 promise 被创建,它就被执行了。如果then方法里返回的是一个promise对象,那么执行下一个then 的时候必定是在上一个then执行完之后执行。

关键点在于then的时候再创建

var createPromise = function(time) {
 return (resolve, reject)=> {
  return new Promise((resolve, reject)=>{
   setTimeout(()=>{
    console.log(‘timein’+time)
    resolve();
   }, time*1000)
  })
 }
}

function serpromise(arr) {
 arr.reduce((pre, next, index, carr)=>{
  return pre.then(next)
 }, Promise.resolve())
}

var arr=[createPromise(2),createPromise(1),createPromise(3),createPromise(4),createPromise(5)];
// 相当于
// Promise.resolve().then(createPromise(2)).then(createPromise(1))……
serpromise(arr)

Array.prototype.reduce + async/await 版本

const reduceAsync = ( arr ) => {
 arr.reduce( async ( prev, curr ) => {
  const { rep } = await prev;
  const obj = await promise( curr, rep );
  console.log( obj );
  return obj;
 }, Promise.resolve( {} ) );
};

Array.prototype.reduce + Promise 版本

const reducePromise = ( arr ) => {
 arr.reduce( ( prev, curr ) => {
  return prev.then( data => {
   return new Promise( ( resolve, reject ) => {
    promise( curr, data.rep ).then( res => {
     console.log( res );
     resolve( res );
    } );
   } );
  } );
 }, Promise.resolve( {} ) );
};

# 执行结果

{ req: ‘PM:04:49:08’, rep: ‘PM:04:49:11’, item: 1 }

{ req: ‘PM:04:49:11’, rep: ‘PM:04:49:14’, item: 2 }

{ req: ‘PM:04:49:14’, rep: ‘PM:04:49:17’, item: 3 }

{ req: ‘PM:04:49:17’, rep: ‘PM:04:49:20’, item: 4 }

Array.prototype.map + Promise 版本

const mapPromise = ( arr ) => {
 let temporary = Promise.resolve( {} );
 arr.map( ( item, index ) => {
  temporary = temporary.then( ( data ) => {
   if (i !== 0) {
    // 第一个初始promise
    console.log( data );
   }
   return promise( item, data.rep );
  } );
 } );
 // 最后一个promise
 temporary.then( data => console.log( data ) );
};

用 map 遍历时,需要过滤初始promise的返回值,并且在遍历结束后,需手动执行最后以后一个promise,否则就会变成如下结果

# 执行结果

{}

{ req: ‘PM:04:49:08’, rep: ‘PM:04:49:11’, item: 1 }

{ req: ‘PM:04:49:11’, rep: ‘PM:04:49:14’, item: 2 }

{ req: ‘PM:04:49:14’, rep: ‘PM:04:49:17’, item: 3 }

以上结果明显不是我们所需要的,但是需要手动过滤第一个promise和执行最后一个promise,会增项不必要的代码量和出错率 后将 mapPromise 修改如下,其原理和Array.prototype.reduce+Promise版本类似

const mapPromise = ( arr ) => {
 let temporary = Promise.resolve( {} );
 arr.map( ( item, index ) => {
  temporary = temporary.then( ( data ) => {
   // if (i !== 0) {
   //  // 第一个promise
   //  console.log( data );
   // }
   return new Promise( ( resolve, reject ) => {
    promise( item, data.rep ).then( data => {
     console.log( data );
     resolve( data );
    } );
   } );
  } );
 } );
 // 最后一个promise
 // temporary.then( d => console.log( d ) );
};

其他

Array.prototype.forEach、Array.prototype.filter、Array.prototype.some、Array.prototype.every等方法和Array.prototype.map类似,就不过多赘述

以上就是JavaScript实现串行请求的示例代码的详细内容,更多关于JavaScript实现串行请求的资料请关注脚本之家其它相关文章!

来源:脚本之家

链接:https://www.jb51.net/article/195555.htm

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:SEO优化专员,转转请注明出处:https://www.chuangxiangniao.com/p/900716.html

(0)
上一篇 2025年1月4日 02:04:47
下一篇 2025年1月4日 02:05:14

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 对javascript网站渗透测试安全检测漏洞方法

    最近渗透测试工作比较多没有空闲的时间来写文章,今天由我们Sine安全的渗透主管来普及一下javascript的安全测试基础,很多客户想要了解具体js的调用漏洞或提交playload的过程以及是如何拿到最高权限和绕过登录等等执行命令漏洞之类的…

    2025年1月4日
    100
  • 国内三款知名java商城系统浅析:shop++、shopnc、javashop

    在众多商家决定搭建一个独立的网上商城系统时,就开始苦恼,市面上这么多商城系统到底该选哪一个才好呢?我们又如何选到靠谱又实用的商城系统呢? 最近我也在了解商城系统的应用程序,市面上的商城系统颇为混杂,以下是本人针对国内三款知名java商城系统…

    建站经验 2025年1月4日
    100
  • 渗透测试对Java架构网站漏洞检测方法

    近期对平台安全渗透测试中遇到有JAVA+mysql架构的网站,针对此架构我们Sine安全渗透工程师整理了下具体的漏洞检测方法和防护修复方法,很多像执行框架漏洞获取到系统权限,以及跨权限写入木马后门等等操作,希望大家在渗透测试的道路中发现更多…

    2025年1月4日
    100
  • java教程:java基础教程带你入门

    Java作为一种面向对象的编辑语言一直在世界编程语言排行榜中稳居第一名。因此想要成为一名优秀的互联网工作者,java的应用学习是基本,零基础或基础薄弱的人下边这套java教程会让你迅速入门。 java教程的基础教程首先是java的简介,在第…

    编程技术 2025年1月4日
    100
  • js实现特别简单的钟表效果

    这篇文章主要为大家详细介绍了js实现特别简单的钟表效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了js实现钟表效果的具体代码,供大家参考,具体内容如下                *…

    2025年1月4日
    100
  • JavaScript 如何计算文本的行数的实现

    这篇文章主要介绍了JavaScript 如何计算文本的行数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 需求:根据行数决定是否限制展开和收起。 思路:用2个块统…

    2025年1月4日
    100
  • 浅谈JavaScript 声明提升

    这篇文章主要介绍了JavaScript 声明提升的相关资料,帮助大家更好的理解和学习JavaScript,感兴趣的朋友可以了解下 1 引例及基本原理 在学习JavaScript声明提升之前,我们先看下面这个例子: console.log(a…

    编程技术 2025年1月4日
    100
  • JavaScript正则表达式匹配字符串字面量

    第一次遇到这个问题, 是大概两年前写代码高亮, 从当时的解决方案到现在一共有三代, 嘎嘎. 觉得还是算越来越好的. 第一代: //那个时候自己正则还不算很精通, 也没有(?:…)这种习惯, 是以寻找结束引号为入口写出的这个正则.…

    编程技术 2025年1月4日
    200
  • AJAX实现数据的增删改查操作详解java后台

    这篇文章主要介绍了AJAX实现数据的增删改查操作,结合实例形式详细分析了ajax结合java后台实现数据库增删改查相关操作技巧,需要的朋友可以参考下 本文实例讲述了AJAX实现数据的增删改查操作。分享给大家供大家参考,具体如下: 主页:in…

    2025年1月4日
    200
  • js+canvas实现画板功能

    这篇文章主要为大家详细介绍了js+canvas实现画板功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了js+canvas实现画板功能的具体代码,供大家参考,具体内容如下 1.实现了画图…

    编程技术 2025年1月4日
    200

发表回复

登录后才能评论

联系我们

156-6553-5169

在线咨询: QQ交谈

邮件:253000106@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

联系微信