promise是nodejs的对象,用于处理异步的同步操作。
new Promsie新建一个promise对象,两个参数(resolve,reject)是两个函数。
当调用resolve意味着操作成功。
当调用reject意味着操作失败。
resolve和reject都只会执行一次。
then 函数会在promise执行完毕之后调用。
第一个参数回调函数会在resolve成功后调用,第二个回调函数会在reject触发后调用。
123456789101112 | 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
123456789101112 | 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
带参数并且多重then函数。
12345678910111213141516171819202122 | 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);}); |
执行结果:
123 | Result 12Argument must be numberError: ai it is error |
在asyncAdd(5,‘7’)函数reject失败后,第二个then仍然调用的是第一个回调函数。
12345678910111213141516171819202122 | 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);}); |
结果为:
123 | Argument must be numbershould be 45 undefinedError: ai it is error |
本文链接: https://dreamerjonson.com/2018/11/15/node-14-promise/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。