在饱尝了利用函数执行栈书写异步代码的痛苦后,人们创造出了Promise对象,
作为在ES6中被统一规范的对象,它用来在函数中将函数逻辑与结果处理分隔开来,
该对象提供了两个参数,resolve以及reject。这两个参数都是函数,下面是使用
Promise对象的简单代码示例:
1 var fn=function(num){ 2 return new Promise(function(resolve,reject){ 3 if(typeof num=='number'){ 4 resolve(); 5 }else{ 6 reject(); 7 } 8 }); 9 } 10 11 fn(2).then(function(){ 12 console.log('输入了一个数字!'); 13 }).catch(function(){ 14 console.log('输入的不是一个数字!'); 15 });
上面是一个简单逻辑判断输入函数fn的参数是否为数字的代码,其中函数体fn执行返回一个Promise对象,
如果结果达到预期,执行resolve(),反之执行reject()。在函数执行时,resolve对应then,reject对应catch,
根据这种一一对应关系,我们可以轻易对函数结果进行操作。值得一提是,then函数含有两个参数,第一
个对应resolve,而第二个对应reject。所以实际上catch(()=>{})等价于then(null,()=>{}).
另外,Promise的应用场景非常广泛,比如我们使用的不同AJAX请求中的有依赖的数据传递等。