返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript异步调用框架的jQuery风格链式该怎么调用
  • 241
分享到

JavaScript异步调用框架的jQuery风格链式该怎么调用

2024-04-02 19:04:59 241人浏览 八月长安
摘要

这期内容当中小编将会给大家带来有关javascript异步调用框架的Jquery风格链式该怎么调用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我们已经实现了一个简单的J

这期内容当中小编将会给大家带来有关javascript异步调用框架Jquery风格链式该怎么调用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

我们已经实现了一个简单的JavaScript异步调用框架,然而还有一些美中不足,那就是顺序执行的异步函数需要用嵌套的方式来声明。

现实开发中,要按顺序执行一系列的同步异步操作又是很常见的。还是用百度Hi网页版中的例子,我们先要异步获取联系人列表,然后再异步获取每一个联系人的具体信息,而且后者是分页获取的,每次请求发送10个联系人的名称然后取回对应的具体信息。这就是多个需要顺序执行的异步请求。

为此,我们需要设计一种新的操作方式来优化代码可读性,让顺序异步操作代码看起来和传统的顺序同步操作代码一样优雅。

传统做法

大多数程序员都能够很好的理解顺序执行的代码,例如这样子的:

var firstResult = firstOperation(initialArgument);  var secondResult = secondOperation(firstResult);  var finalResult = thirdOperation(secondResult);  alert(finalResult);

其中先执行的函数为后执行的函数提供所需的数据。然而使用我们的JavaScript异步调用框架后,同样的逻辑必须变成这样子:

firstAsyncOperation(initialArgument).addCallback(function(firstResult) {    secondAsyncOperation(firstResult).addCallback(function(secondResult) {      thirdAsyncOperation(secondResult).addCallback(function(finalResult) {          alert(finalResult);      });    });  });

链式写法

我认为上面的代码实在是太不美观了,并且希望能够改造为jQuery风格的链式写法。为此,我们先构造一个用例:

Async.Go(initialArgument)    .next(firstAsyncOperation)    .next(secondAsyncOperation)    .next(thirdAsyncOperation)    .next(function(finalResult) { alert(finalResult); })

在这个用例当中,我们在go传入初始化数据,然后每一个next后面传入一个数据处理函数,这些处理函数按顺序对数据进行处理。

同步并存

上面的用例调用到的全部都是异步函数,不过我们***能够兼容同步函数,让使用者无需关心函数的具体实现,也能使用这项功能。为此我们再写一个这样的用例:

Async.go(0)    .next(function(i) { alert(i); return i + 1; })    .next(function(i) {      alert(i);      var operation = new Async.Operation();      setTimeout(function() { operation.yield(i + 1); }, 1000);      return operation;    })    .next(function(i) { alert(i); return i + 1; })    .next(function(i) { alert(i); return i; });

在上述用例中,我们期待能够看到0, 1, 2, 3的提示信息序列,并且1和2之间间隔为1000毫秒。

异步本质

一个链式调用,本质上也是一个异步调用,所以它返回的也是一个Operation实例。这个实例自然也有result、state和completed这几个字段,并且当整个链式调用完成时,result等于***一个调用返回的结果,而completed自然是等于true。

我们可以扩展一下上一个用例,得到如下用例代码:

var chainOperation = Async.go(0)    .next(function(i) { alert(i); return i + 1; })    .next(function(i) {      alert(i);      var operation = new Async.Operation();      setTimeout(function() { operation.yield(i + 1); }, 1000);      return operation;    })    .next(function(i) { alert(i); return i + 1; })    .next(function(i) { alert(i); return i; });   setTiemout(function() { alert(chainOperation.result; }, 2000);

把链式调用的返回保存下来,在链式调用完成时,它的result应该与***一个操作的返回一致。在上述用例中,也就是3。

调用时机

尽管我们提供了一种链式调用方式,但是用户不一定会按照这种固定的方式来调用,所以我们仍然要考虑兼容用户的各种可能用法,例如说异步地用next往调用链添加操作:

var chainOperation = Async.go(0);  chainOperation.next(function(i) { alert(i); return i + 1; });  setTimeout(function() {    chainOperation.next(function(i) {      alert(i);      var operation = new Async.Operation();      setTimeout(function() { operation.yield(i + 1); }, 2000);      return operation;    })  }, 1000);  setTimeout(function() {    chainOperation.next(function(i) { alert(i); return i + 1; });  }, 2000);

在这个用例当中,用户每隔1000毫秒添加一个操作,而其中第二个操作耗时2000毫秒。也就是说,添加第三个操作时第二个操作还没返回。作为一个健壮的框架,必须要能兼容这样的使用方式。

此外我们还要考虑,用户可能想要先构造调用链,然后再执行调用链。这时候用户就会先使用next方法添加操作,再使用go方法执行。

var chainOperation = Async    .chain(function(i) { alert(i); return i + 1; })    .next(function(i) {      alert(i);      var operation = new Async.Operation();      setTimeout(function() { operation.yield(i + 1); }, 2000);      return operation;    })    .go(0)  setTimeout(function() {    chainOperation.next(function(i) { alert(i); return i + 1; })  }, 1000);

在上述用例中,用户通过chain和next添加了头同步操作和异步操作各一个,然后用go执行调用链,在调用链执行完毕之前又用next异步追加了一个操作。一个健壮的框架,在这样的用例当中应该能够如同用户所期望的那样提示0, 1, 2。

针对链式调用的需求,我们设计了如此多的用例,包括各种奇怪的JavaScript异步调用方式。

上述就是小编为大家分享的JavaScript异步调用框架的jQuery风格链式该怎么调用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网JavaScript频道。

--结束END--

本文标题: JavaScript异步调用框架的jQuery风格链式该怎么调用

本文链接: https://lsjlt.com/news/86016.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript异步调用框架的jQuery风格链式该怎么调用
    这期内容当中小编将会给大家带来有关JavaScript异步调用框架的jQuery风格链式该怎么调用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我们已经实现了一个简单的J...
    99+
    2024-04-02
  • JavaScript中怎么异步调用框架
    本篇文章为大家展示了JavaScript中怎么异步调用框架,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。调用入口链式调用存在Async.go方法和Async.cha...
    99+
    2024-04-02
  • java8异步调用该怎么使用
    这篇文章跟大家分析一下“java8异步调用该怎么使用”。内容详细易懂,对“java8异步调用该怎么使用”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“java8异步调用该怎么使用”...
    99+
    2023-06-29
  • javascript严格模式怎么调用
    这篇“javascript严格模式怎么调用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“j...
    99+
    2024-04-02
  • 如何使用Promise链式调用解决多个异步回调的问题
    小编给大家分享一下如何使用Promise链式调用解决多个异步回调的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!介绍所谓Promise,简单来说就是一个容器,里面保存着某个未来才会结束...
    99+
    2024-04-02
  • Vue中的同步调用和异步调用怎么实现
    这篇“Vue中的同步调用和异步调用怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue中的同步调用和异步调用怎么实现...
    99+
    2023-06-28
  • 基于fastapi框架的异步怎么使用
    本篇内容主要讲解“基于fastapi框架的异步怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于fastapi框架的异步怎么使用”吧!使用fastapi框架开发web项目1、为什么要用f...
    99+
    2023-07-05
  • web分布式定时任务调度框架怎么使用
    这篇文章主要讲解了“web分布式定时任务调度框架怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web分布式定时任务调度框架怎么使用”吧!一、业务背景1.1 为什么需要使用定时任务调度...
    99+
    2023-06-04
  • Vue2中的可选链式调用操作符怎么用
    这篇文章主要介绍“Vue2中的可选链式调用操作符怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue2中的可选链式调用操作符怎么用”文章能帮助大家解决问题。一、先说一下什么是.(可选链式调用操...
    99+
    2023-06-29
  • 怎么进行Windows 8应用开发中的异步调用
    这篇文章将为大家详细讲解有关怎么进行Windows 8应用开发中的异步调用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。不论是桌面客户端还是Web应用通常会出现处理时间较长的操作,为了在这段...
    99+
    2023-06-17
  • Python强大的任务调度框架Celery怎么使用
    本篇内容介绍了“Python强大的任务调度框架Celery怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是 celery这次我们...
    99+
    2023-07-06
  • 自动化测试框架pytest的Fixture固件怎么调用
    本篇内容介绍了“自动化测试框架pytest的Fixture固件怎么调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是固件Fixture...
    99+
    2023-07-05
  • 用 Python 和 Javascript 实现分布式任务调度,有哪些值得推荐的框架?
    随着云计算和大数据的发展,分布式系统的重要性越来越受到关注。在分布式系统中,任务调度是一个非常关键的部分,而分布式任务调度可以更好地利用资源,提高系统的效率和可靠性。本文将介绍用 Python 和 Javascript 实现分布式任务调度的...
    99+
    2023-06-19
    leetcode javascript 分布式
  • SAP BOPF和Spring框架里的控制器是怎么被调用的
    本篇内容主要讲解“SAP BOPF和Spring框架里的控制器是怎么被调用的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SAP BOPF和Spring框架里的控制器是怎么被调用的”吧!BOPF...
    99+
    2023-06-04
  • C#多线程控制进度条的异步调用怎么实现
    这篇文章主要讲解了“C#多线程控制进度条的异步调用怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#多线程控制进度条的异步调用怎么实现”吧!看看具体的步骤和实现:在上面的代码中,我们...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作