JS异步编程——promise

一 、同步与异步

  • 同步任务是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务,任务是顺序执行的。
  • 异步则指当程序顺序执行碰到某个异步任务时,则会把这个任务挂起,继续执行后面的同步代码代码,等到需要去执行异步代码的时候再去执行它,这就是异步,JS并不会傻呵呵的等着异步任务的执行,而是继续执行了后面的代码。

二、Promise

  1. Promise 是一个对象,它代表了一个异步操作的最终完成或者失败,它只会有三种状态:pending 准备状态、resolved 成功状态、rejected 拒绝状态,并且成为某种状态后就无法再对状态进行改变,Promise和then是配套出现的,then是对上一个Promise状态改变的处理。每个then返回的其实也是一个Promise。首先介绍如何创建一个 Promise对象:
new Promise((resolve,reject)=>{
	resolve("成功调用")
	//reject("失败调用");
}).then(
    value => {
    console.log("成功调用");
   },
   reject => {
    console.log("失败调用");
   }
)

then中第一个函数是成功的回调函数,第二个函数是失败的回调函数。then中一般只包含成功的处理函数,而失败的处理函数一般放在catch中。
2. 连续执行两个或者多个异步操作是一个常见的需求,在上一个操作执行成功之后,开始下一个的操作,并带着上一步操作所返回的结果。我们可以通过创造一个 Promise 链来实现这种需求。
如果不适用Promise,则要做多重异步操作就会导致经典的回调地狱:

doSomething(function(result) {
  doSomethingElse(result, function(newResult) {
    doThirdThing(newResult, function(finalResult) {
      console.log('Got the final result: ' + finalResult);
    }, failureCallback);
  }, failureCallback);
}, failureCallback);

这会使代码的可读性大大下降。
现在,我们可以把回调绑定到返回的 Promise 上,形成一个 Promise 链:

doSomething().then(function(result) {
  return doSomethingElse(result);
})
.then(function(newResult) {
  return doThirdThing(newResult);
})
.then(function(finalResult) {
  console.log('Got the final result: ' + finalResult);
})
.catch(failureCallback);

这里我们在每个then中都只绑定了成功的回调函数,失败的回调统一放在catch中处理。
一般在then中会返回一个Promise对象,紧接着后面的then就作为前面返回的Promise的成功回调函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值