(1)new Promise(function(resolve,reject){})返回了一个Promise对象

var p=new Promise(function(resolve,reject){}); alert(p instanceof Promise); //true

(2)new Promise的参数函数同步执行

var p=new Promise(function(resolve,reject){ alert(1); //先 }); alert(2); //后执行结果:12

(3)Promise.prototype.then在resolve以后也能调用

var p=new Promise(function(resolve,reject){ setTimeout(function(){ resolve(1); },1000); }); p.then(function(v){ alert(v); }); setTimeout(function(v){ p.then(function(v){//可以调用 alert(v); }); },2000);执行结果:1 1

(4)Promise.prototype.then返回了一个新的Promise对象,

而不是原来的Promise对象var p=new Promise(function(resolve,reject){}); var q=p.then(function(v){}); alert(q===p); //false

(5)Promise.prototype.then中的this指向window

var p=new Promise(function(resolve,reject){ resolve(1); }); p.then(function(v){ alert(this===window); //true });

(6)Promise.prototype.then返回的新Promise对象,

以参数函数的返回值作为新Promise的终结值,

如果不是Promise对象,则相当于返回Promise.resolve(…)var p=new Promise(function(resolve,reject){ resolve(1); }); p.then(function(v){ alert(v); //1 return 2; //相当于返回Promise.resolve(2); }).then(function(v){ alert(v); //2 return Promise.resolve(3); }).then(function(v){ alert(v); //3 return Promise.reject(4); }).catch(function(v){ alert(v); //4 });

(7)Promise.prototype.then(onFulfilled,onRejected)

与Promise.prototype.catch(onRejected)var p=new Promise(function(resolve,reject){ reject(1); }); p.then(function(m){ alert(m); //不执行 },function(n){ alert(n); //1 }); p.catch(function(v){ alert(v); //1 });

(8)throw也会导致Promise被reject

var p=new Promise(function(resolve,reject){ throw 1; //保存栈信息,可以throw new Error(1);即e.message/e.stack }); p.catch(function(v){ alert(v); //1 });

(9)Promise.resolve(value/promise/thenable)

返回一个以参数为终结值的Promise对象

value:

var p1=Promise.resolve(1); p1.then(function(v){ alert(v); //1 });

Promise:

var p2=Promise.resolve(new Promise(function(resolve,reject){ resolve(1); })); p2.then(function(v){ alert(v); //1 });

thenable:

var p3=Promise.resolve({ then:function(resolve,reject){ resolve(1); } }); p3.then(function(v){ alert(v); //1 });

(10)Promise.reject(reason)

var p=Promise.reject(1); p.then(function(m){ alert(m); //不执行 },function(n){ alert(n); //1 }); p.catch(function(v){ alert(v); //1 });

(11)Promise.all(iterable)返回一个新的Promise,

它等所有的iterable中的Promise都Resolve后就Resolve,

只要有一个Reject就Reject。

如果iterable中某一个不是Promise,则使用Promise.resolve(…)转换为Promise

var p=Promise.resolve(1); Promise.all([true,p]).then(function(v){ alert(JSON.stringify(v)); //[true, 1] }); var p1=Promise.resolve(1); varp2=Promise.reject(2); Promise.all([true,p1,p2]).then(function(m){ alert(resolve: +JSON.stringify(m)); //不执行 },function(n){ alert(reject: +JSON.stringify(n)); //reject: 2 });

(12)Promise.race(iterable)返回一个新的Promise,

只要iterable中有一个Promise被Resolve/Reject了就Resolve/Reject。var p1=new Promise(function(resolve,reject){ setTimeout(function(){ resolve(1); },1000); }); var p2=new Promise(function(resolve,reject){ setTimeout(function(){ reject(1); },2000); }); Promise.race([p1,p2]).then(function(m){ alert(resolve: +m); //resolve: 1 },function(n){ alert(reject: +n); //不执行 });

声明:本站为非盈利性赞助网站,本站所有软件来自互联网,版权属原著所有,如有需要请购买正版。如有侵权,敬请来信联系我们,我们立即删除。