范例:
var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('执行完成'); resolve('随便什么数据'); }, 2000);});
resolve(data);
函数的作用,将Promise对象的状态从“未完成”变成“成功”。
reject(data);
函数的作用是,在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去,实际就是将“未完成”状态变成“失败”。
范例:
new Promise(function(resolve, reject) { setTimeout(function() { console.log("setTimeout", 2000); // resolve("执行完成"); reject("执行出错"); }); }).then(function(data) { console.log(data); }, function(err) { console.log("错误", err); })
then(function(data){});当接收到“成功消息时执行内部function;
then(function(data){},function(err){});当接收到“成功”消息时执行第一个function,当接收到“失败”消息时执行第二个function。
catch(reject);当出现“错误”时会一直往后续then传递,直到被catch捕获。
注:每个then或catch都会生成新的promise实例,因此在每个then或catch中均需要发出resolve或reject消息,否则后续then或catch无法执行。
Promise.all()
var p = Promise.all([p1, p2, p3]);
all()接受数组作为参数。p1,p2,p3都是Promise的实例对象,p要变成Resolved状态需要p1,p2,p3状态都是Resolved,如果p1,p2,p3至少有一个状态是Rejected,p的状态就变成Rejected。
Promise.race()
var p = new Promise( [p1,p2,p3] )
只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。只获取最新发生状态变化的实例,后续丢弃。
Proise.resolve()、Promise.reject()将现有对象转化为Promise对象,并将状态直接置为resolve或reject。范例:
Promise.resolve('foo');//状态为resolvePromise.reject('foo');//状态为reject