nodejs渐入佳境[14]-promise对象处理异步-创新互联

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
  • 本文链接: https://dreamerjonson.com/2018/11/15/node-14-promise/

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!

nodejs渐入佳境[14]-promise对象处理异步

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


网站栏目:nodejs渐入佳境[14]-promise对象处理异步-创新互联
分享地址:http://myzitong.com/article/hidci.html