Promise 初识

原创 heliang090034 随笔 JS 137阅读 2017-11-24 17:51:13 举报

Promise 是异步编程解决方案,比传统的回到函数方式更加合理并强大,所谓Promise其实是一个容器,它保存着异步操作的结果。
Promise对象有一下两个特点:
(1).对象状态不受外界环境影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(成功)和reject(已失败)。
(2).一旦状态改变,就不会再变,任何时候都可以得到这个结果,Promise对象的状态改变,只能有两种可能,从pending变为fulfilled和从pending变为rejected。

基本API
Promise.resolve()
Promise.reject()
Promise.prototype.then()
Promise.prototype.catch()
Promise.all([p1,p2,p3])
Promise.race()

Promise.resolve(result)在Proimise由pending->fulfilled(成功)状态时调用result值会被传递到.then方法中
Promise.reject(error)在Proimise由pending->reject(失败)状态时调用error值会被传递到.catch方法中
Promise.all([p1,p2])可以一次执行多个Promise实例结果会在then中体现,并将结果包装成一个数组传递给当前调用处

Promise.all([p1,p2,p3]).then(function(ary){
//p1 p2 p3的结果会被放入
console.log(ary);
})

Promise串行示例:

function getUsers(){
var url="https://api.github.com/users";;
return new Promise(function(resolve,reject){
fetch(url).then(function(resp){
return resp.json();
}).then(function(data){
resolve(data);
})
})
}

function getUser(datas){
var user=datas[0].login;
var url=https://api.github.com/users/${user};
return new Promise(function(resolve,reject){
fetch(url).then(function(resp){
return resp.json();
}).then(function(user){
resolve(user);
})
})
}

getUsers().then(function(datas){
return getUser(datas);
}).then(function(user){
console.log(user);
})

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复