Node.js中的Promise异步编程怎么掌握

本文小编为大家详细介绍“Node.js中的Promise异步编程怎么掌握”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.js中的Promise异步编程怎么掌握”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

介绍 

  • Promise就是一个用来存储数据的对象

  • 但是由于Promise存取方式的特殊,所以可以直接将异步调用的结果存储到Promise中

function sum(a, b) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(a + b)
        }, 1000)
    })
}
// 返回的是Promise,所以接收的时候不用变量接收,而是采用then获取Promise存储的数据
sum(123, 345).then(result => {
    console.log("结果为", result)
})

调用方法就会有返回值,而调用then、catch、finally三种方法都会产生一个新的Promise

const promise = new Promise((resolve, reject) => {
    resolve("没问题的数据")
})
const p2 = promise.then()
console.log(p2)

对Promise进行链式调用时,后面的方法(then和catch)读取的是上一步的执行结果

如果上一步的执行结果不是当前想要的结果,跳过当前的方法

const promise = new Promise((resolve, reject) => {
    reject("没问题的数据")
})
// promise的链式调用
promise
    .then(r => console.log("第一个then", r))
    .catch(r =>  {
        console.log("异常处理", r)
        return "嘻嘻"
    })
    .then(r => console.log("第二个then", r))

打印结果为:

异常处理 没问题的数据
第二个then 嘻嘻

上述示例中,reject绑定了异常的数据,下面的promise调用的第一个then方法显然不会接收reject绑定的那个的数据,即有问题的数据,所以第一个then被跳过,catch则专门用来接收有问题的数据和reject绑定的数据,所以进入和catch方法并打印 “没问题的数据" ,这个方法的结尾还有个return,这个return返回的 ”嘻嘻” 显然是个正常数据,执行完catch后返回了正常数据 “嘻嘻" 给新的promise,这个正确数据又被之后的 then方法捕捉到了,所以会把 ”嘻嘻" 接着打印出来;每次调用catch、finally、then都会产生一个新的promise

当Promise出现异常时,而整个调用链中没有catch,则异常则会向外抛出

所以一般都会在最后放catch方法,防止会有异常而没有相应的处理方法

静态方法

Promise的静态方法直接通过Promise类去调用,这些方法可以帮助我们完成一些更加复杂的异步操作

Promise.resolve()

创建一个立即完成的Promise

Promise.resolve(10)
// 等价于
new Promise((resolve, reject) => {
    resolve(10)
})

Promise.all

  • 需要有多个Promise需要执行,且需要多个Promise都执行完毕,再将结果进行统一处理,就使用Promise.all来处理

  • 语法: Promise.all(iterable)

  • Promise.all([...]) 同时但会多个Promise的执行结果,其中有一个报错,就返回错误信息

  • all需要一个数组(可迭代对象) 作为参数,数组种可以存放多个Promise

function sum(a, b) {
    return new Promise((reslove, reject) => {
        setTimeout(() => {
            reslove(a + b)
        }, 1000);
    })
}
Promise.all([sum(1, 1), sum(2, 3), sum(3, 3)])
    .then((result) => {
        console.log(result)
    })

上面的例子中,调用三次sum,且将其添加到数组中传递给all,调用all会返回一个新的Promise,当三次计算都完成后,新的promise也会变成完成状态,并将三次执行的结果封装到数组中返回。\

// 添加的数据中一旦出现一个或者多个reject添加的错误信息, 整体的运行结果就会报错
Promise.all([sum(1, 1), sum(2, 3), sum(3, 3)], Promise.reject("哈哈"))
    .then((result) => {
        console.log(result)
    })

注意:在all中添加数据,如果出现了一个或者多个通过reject添加的错误信息,运行结果就会报错,一个错,整个就错

Promise.allsSettled

  • Promise.allSettled( [...]) 同时返回多个Promise的运行结果,无论成功还是失败

  • 但是会根据不同得到状态返回不同的数据

成功:{status:”fulfilled”, value:result}

失败:{status:”rejected”, reason:error}

Promise.race race

  • 会返回首先执行完的Promise,而忽略其他未执行完的Promise

Promise.Any

  • any和race类似,但是他只会返回第一个成功的Promise,如果所有的Promise都失败才会返回一个错误信息

读到这里,这篇“Node.js中的Promise异步编程怎么掌握”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注本站行业资讯频道。

相关推荐:

怎么使用Promise封装小程序wx.request

这篇文章主要介绍了怎么使用Promise封装小程序wx.request,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。因为业务需要,每个http请求都要加上一个请求头,所以每次都要写很多重复的代码。现在尝试把wx.request简单的封...

Node.js中async和await关键字如何使用

本篇内容主要讲解“Node.js中async和await关键字如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js中async和await关键字如何使用”吧!async和await关键字async和await是ES2017中提出来的,as...

在 Node.js 中使用 async 函数的方法

借助于新版V8引擎,Node.js从7.6开始支持async函数特性。今年10月31日,Node.js8也开始成为新的长期支持版本,因此你完全可以放心大胆地在你的代码中使用async函数了。在这边文章里,我会简要地介绍一下什么是async函数,以及它会如何改变我们编写Node.js应用的方式。 1什...

async 函数如何在Node.js中使用

本篇文章为大家展示了async函数如何在Node.js中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1什么是async函数利用async函数,你可以把基于Promise的异步代码写得就像同步代码一样。一旦你使用async关键字来定义了一个函数,那你就可...

js中async与Promise的关系是什么

小编给大家分享一下js中async与Promise的关系是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!2018年已经到了5月份,node的4.x版本也已经停止了维护我司的某个服务也已经切到了8.x,目前正在做koa2...

Node.js中Bootstrap-table如何实现分页

这篇文章给大家分享的是有关Node.js中Bootstrap-table如何实现分页的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、Bootstrap-table使用官方文档:http://bootstrap-table.wenzhixin.net.cn/zh-cn/d...

如何使用Promise链式调用解决多个异步回调的问题

小编给大家分享一下如何使用Promise链式调用解决多个异步回调的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!介绍所谓Promise,简单来说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。缺少场景支撑,对于新手而言,很难理解Promise的意义。...

Node.js中怎么利用node-cron来调度任务

这篇文章给大家分享的是有关Node.js中怎么利用node-cron来调度任务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 没有一个开发人员愿意把所有时间都花在繁琐的任务上,比如系统维护和管理、日常数据库备份以及定期下载文件和电子邮件。你更愿意专注于富有成效的工作,而不...