js异步处理方案之异步串行与异步并行

好的!下面是关于“js异步处理方案之异步串行与异步并行”的完整攻略:

什么是异步处理?

异步是 JavaScript 编程语言所采用的一种非阻塞式的编程方式。此编程方式可以处理大量的 I/O 操作,如文件读写或者网络请求。

异步串行

异步串行是指由上一个异步操作传递结果给下一个异步操作的一种方式,也可以用管道的模型来类比。

异步串行的应用场景,是在需要执行多个异步请求,并且需要按照顺序执行每个请求,每个请求必须等待前一个请求结果返回才能继续执行下一个请求的时候。

以下是一个异步串行的代码示例:

const axios = require('axios');
const articleUrls = ['url_1', 'url_2', 'url_3'];

async function getArticleTitle(url) {
  try {
    const response = await axios.get(url);
    const htmlString = response.data;
    const regex = /<title>([^<]*)<\/title>/;
    const matches = regex.exec(htmlString);
    const title = matches && matches[1];
    return Promise.resolve(title);
  } catch (error) {
    console.error(error);
    return Promise.reject(error);
  }
}

async function getArticlesTitles(urls) {
  try {
    const results = [];
    for (let url of urls) {
      const title = await getArticleTitle(url);
      results.push(title);
    }
    return Promise.resolve(results);
  } catch (error) {
    console.error(error);
    return Promise.reject(error);
  }
}

getArticlesTitles(articleUrls).then(data => console.log(data));

在上述代码中,我们首先声明了一个 articleUrls 数组来存储需要请求的文章链接,同时,还声明了一个 getArticleTitle 函数和一个 getArticlesTitles 函数。

getArticleTitle 函数用来获取文章的标题,getArticlesTitles 函数用来按照顺序获取多篇文章的标题,并将文章标题存储到 results 数组里。最终,我们调用了 getArticlesTitles 函数,并且使用 then() 方法来输出所有文章的标题。

异步并行

异步并行是指当多个异步操作互不干扰,可以同时执行的一种方式。

异步并行的应用场景,是在需要执行多个耗时的异步请求,并且这些请求可以同时执行的时候,使用异步并行的方式可以提高程序的运行效率。

以下是一个异步并行的代码示例:

const axios = require('axios');
const articleUrls = ['url_1', 'url_2', 'url_3'];

async function getArticleTitle(url) {
  try {
    const response = await axios.get(url);
    const htmlString = response.data;
    const regex = /<title>([^<]*)<\/title>/;
    const matches = regex.exec(htmlString);
    const title = matches && matches[1];
    return Promise.resolve(title);
  } catch (error) {
    console.error(error);
    return Promise.reject(error);
  }
}

async function getArticlesTitles(urls) {
  try {
    const results = await Promise.all(
      urls.map(url => getArticleTitle(url))
    );
    return Promise.resolve(results);
  } catch (error) {
    console.error(error);
    return Promise.reject(error);
  }
}

getArticlesTitles(articleUrls).then(data => console.log(data));

在上述代码中,我们与之前的异步串行代码类似,使用了 getArticleTitle 函数来获取文章的标题。这一次,我们使用了数组的 map 方法去遍历文章链接数组,从而创建了一个新的由 Promise 对象组成的数组,每个 Promise 对象都代表了一个需要获取的文章标题。最后,我们使用 Promise.all() 方法去等待这些异步请求,然后将所有文章的标题存储到 results 数组里,并输出。

总结

以上就是关于“js异步处理方案之异步串行与异步并行”的完整攻略。异步串行适用于需要按顺序请求的多个异步请求,而异步并行适用于多个相互独立的异步请求。当然,我们还可以将这两种方式进行组合使用,例如先进行异步串行操作获取到的一个结果,再将这个结果用于进行异步并行等操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js异步处理方案之异步串行与异步并行 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQWidgets jqxButton宽度属性

    jQWidgets jqxButton宽度属性详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件工具包。jqxButton是其中之一。本文将详细介绍jqxButton的宽度属性,包括定义、语法和示例。 宽度属性的定义 jqxButton的宽度属性用于设置按钮的宽度。宽度可以是任何数字或字符串,表示像素或百分比。 宽度属性的语法 j…

    jquery 2023年5月10日
    00
  • 如何使用jQuery Mobile创建链接有序的列表视图

    以下是使用jQuery Mobile创建链接有序的列表视图的完整攻略: 首先,需要在HTML文件中引入jQuery Mobile库。可以通过以下代码实现: <head> <meta name="viewport" content="width=device-width, initial-scale=1&quot…

    jquery 2023年5月11日
    00
  • jQWidgets jqxDropDownList disableAt()方法

    jQWidgets jqxDropDownList disableAt()方法详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包。jqxDropDownList是Widgets组件下的组件本文详细介绍jqxDropDownList的disableAt()方法,包括用法、语法和示例。 disableAt()方法的基本法 di…

    jquery 2023年5月10日
    00
  • jQuery里filter()函数与find()函数用法分析

    jQuery里filter()函数与find()函数用法分析 1. filter()函数用法分析 filter()函数是jQuery中用来过滤匹配元素集合的函数,它可以根据指定的规则来筛选出符合条件的元素,然后将这些元素返回为一个新的集合。它的基本语法如下所示: $(selector).filter(criteria) 其中,selector表示要筛选的元素…

    jquery 2023年5月27日
    00
  • jQWidgets jqxValidator animationDuration属性

    jQWidgets jqxValidator 动画时长(animationDuration)属性详解 在一个表单验证工具中,动画特效可以提高用户体验。jQWidgets jqxValidator组件允许应用动画特效来引导用户向正确的输入方式迭代。animationDuration属性就是控制这些动画特效的时间。 属性介绍 属性名称 animationDura…

    jquery 2023年5月12日
    00
  • jQWidgets jqxTooltip animationShowDelay属性

    以下是关于 jQWidgets jqxTooltip 组件中 animationShowDelay 属性的详细攻略。 jQWidgets jqxTooltip animationShowDelay 属性 jQWidgets jqxTooltip 组件的 animationShowDelay 属性用于设置提示框显示动画的延迟时间。您可以使用该属性来控制提示框显…

    jquery 2023年5月11日
    00
  • jQWidgets jqxGrid initrowdetails属性

    jQWidgets jqxGrid initrowdetails 属性详解 jQWidgets jqxGrid 是一种表格控件,用于在 Web 应用程序中创建表格。initrowdetails 属性是 jqGrid 控件的一个属性,用于初始化行详细信息。本文将详细讲解 initrowdetails 属性的使用方法,并提供两个例。 属性 initrowdeta…

    jquery 2023年5月10日
    00
  • jQuery垂直圆点导航插件

    首先我们需要了解什么是垂直圆点导航,它是一种常见的网站导航方式,通常位于网站的侧边栏上,可以让用户快速地浏览整个网站的目录结构。 jQuery垂直圆点导航插件可以帮助我们快速实现这种导航方式,下面是使用这个插件的完整攻略: 步骤一:引入jQuery库和插件文件 首先需要在网页中引入jQuery库和jQuery垂直圆点导航插件文件。可以通过以下代码实现: &l…

    jquery 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部