Promise
promise是nodejs的对象,用于处理异步的同步操作。
new Promsie新建一个promise对象,两个参数(resolve,reject)是两个函数。
当调用resolve意味着操作成功。
当调用reject意味着操作失败。
成都创新互联于2013年创立,先为玉门等服务建站,玉门等地企业,进行企业商务咨询服务。为玉门企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
resolve和reject都只会执行一次。
then 函数会在promise执行完毕之后调用。
第一个参数回调函数会在resolve成功后调用,第二个回调函数会在reject触发后调用。
resolve操作成功
1 2 3 4 5 6 7 8 9 10 11 12
| var somePromise = new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve('hey it works'); },2500);
});
somePromise.then((message)=>{ console.log('Success',message); },(errorMessage)=>{ console.log('Error:',errorMessage); });
|
打印出hey it works
reject操作失败
1 2 3 4 5 6 7 8 9 10 11 12
| var somePromise = new Promise((resolve,reject)=>{ setTimeout(()=>{ reject('ai it is error'); },2500);
});
somePromise.then((message)=>{ console.log('Success',message); },(errorMessage)=>{ console.log('Error:',errorMessage); });
|
打印出Error: ai it is error
复杂promise
带参数并且多重then函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var asyncAdd = (a,b)=>{ return new Promise((resolve,reject)=>{ setTimeout(()=>{ if(typeof a==='number' && typeof b==='number'){ resolve(a+b); }else{ reject('Argument must be number'); } }); }); };
asyncAdd(5,7).then((res)=>{ console.log('Result',res); return asyncAdd(res,'33'); },(errorMessage)=>{ console.log(errorMessage); }).then((res)=>{ console.log('should be 45',res); },(errorMessage)=>{ console.log(errorMessage); });
|
执行结果:
1 2 3
| Result 12 Argument must be number Error: ai it is error
|
多重then特性
在asyncAdd(5,‘7’)函数reject失败后,第二个then仍然调用的是第一个回调函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var asyncAdd = (a,b)=>{ return new Promise((resolve,reject)=>{ setTimeout(()=>{ if(typeof a==='number' && typeof b==='number'){ resolve(a+b); }else{ reject('Argument must be number'); } }); }); };
asyncAdd(5,'7').then((res)=>{ console.log('Result',res); return asyncAdd(res,'33'); },(errorMessage)=>{ console.log(errorMessage); }).then((res)=>{ console.log('should be 45',res); },(errorMessage)=>{ console.log(errorMessage); });
|
结果为:
1 2 3
| Argument must be number should be 45 undefined Error: ai it is error
|
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
本文标题:nodejs渐入佳境[14]-promise对象处理异步-创新互联
浏览路径:
http://cdxtjz.com/article/hidci.html