promise解决异步问题

1.为什么使用promise呢?

在一段代码中,如果有两个异步请求,例如有两个回调函数,我们想让第一个函数(代码在上方)执行完成之后,得到一个结果,再去执行第二个函数(代码在下方)

由于异步请求的执行不一定是按照代码从上到下的顺序执行的,因此程序有可能先执行第二个函数,再去执行第一个函数,这样就会报错。为了解决这个问题,传统的方法

是将第二个回调函数嵌套在第一个回调函数内部,就可以保证第一个回调函数执行完成后再执行第二个回调函数。但是问题又来了,如果一段代码中有多个回调函数,就要不停的嵌套,就会进入回调地狱,这时候promise就派上用场了。promise可以使用.then(res)=>{函数体}的方式,将上一个函数返回结果res作为参数传递到下一个回调函数中去,这样就能保证上一个函数执行完成之后,再执行下一个函数。

promise()
.then((res)=>{
//code
return res.a;
})
.then((res)=>{
//code
return res.b;
})
.then((res)=>{
//code
return res.c;
})


采用链式写法,即then后在调用另一个then方法

2.

ES6规定,Promise 对象是一个构造函数,用来生成Promise 实例。

下面的代码就是一个Promise 实例:

复制代码
var promise=new Promise(function(resolve,reject){
    //code
    if(/*异步操作*/){
        resolve();
    }else{
        reject();
    }
})

Promise构造函数接受一个函数作为参数,该函数有两个参数分别是resolve和reject,它们也是函数。

resolve函数的作用是,将Promise 对象的状态从“未完成”(pending)==>“成功”(resolved),在异步操作成功时调用,并将异步操作结果,作为参数传递出去。

reject函数的作用是,将Promise 对象的状态从“未完成”(pending)==>“失败”(rejected),再异步操作失败时调用,并将操作报错的错误,作为参数传递出去。

猜你喜欢

转载自www.cnblogs.com/panzai/p/12427703.html