当前位置: 首页 > 后端技术 > Node.js

ES6的Promise

时间:2023-04-04 00:02:20 Node.js

1.什么是promise?使用promise有什么好处?Promise是一种异步编程的解决方案。好处是可以避免嵌套回调。2.背景:在promise出现之前,你一定写过这样的代码:$.ajax({url1:'...',success:function(data1){$.ajax({url2:'......',success:function(data2){...//data2的一些操作依赖于data1}});}});在上面的代码中,如果data3依赖于data2,那么上面的代码会有更深的嵌套,promise的出现就是为了解决这些嵌套带来的不优雅和可读性低的问题。3、Promise使用介绍Promise是一个对象,我们可以从中获取异步操作的结果。Promise代表一个异步操作,有三种状态:Pending(进行中)、Resolved(完成,也称为Fulfilled)和Rejected(失败)。创建一个promise:varpromise=newPromise(function(resolve,reject){...一些代码,比如httprequestif(success){resolve(data);//当异步请求成功时,将结果传递给outsidethroughresolve}else{reject(error);//异步请求失败时,通过reject传递结果}});简单用例:varMongoClient=require('mongodb').MongoClient;vargetData=function(url){varpromise=newPromise(function(resolve,reject){MongoClient.connect(url,function(err,db){if(db){varcollection=db.collection('users');collection.find({}).toArray(function(err,docs){resolve(docs);});}if(err){reject(err);}});});returnpromise;}getData('mongodb://localhost:27017/zuckjet').then(function(data){console.log(data);},function(err){console.log(err);});在上面的代码中,首先创建一个函数getData,它返回一个promise实例。在这个promise实例中,执行的异步操作代码是访问本地的mongodb数据库数据。当请求数据成功后,通过resolve向外传递请求结果。当请求失败时,通过reject向外传递错误信息。promise.then()接受两个回调函数作为参数。第一个回调函数接收请求成功时的数据,即上述代码中resolve(docs)中的doc,第二个回调函数接收请求失败时的数据。信息,也就是上面代码中reject(err)中的err。