js promise的功能(JavaScriptPromise用法总结)

(1)new Promise(function(resolve,reject){})返回了一个Promise对象,现在小编就来说说关于js promise的功能?下面内容希望能帮助到你,我们来一起看看吧!

js promise的功能(JavaScriptPromise用法总结)

js promise的功能

(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); //不执行 });

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页