nodejs渐入佳境[14]-promise对象处理异步
promise是nodejs的对象,用于处理异步的同步操作。
new Promsie新建一个promise对象,两个参数(resolve,reject)是两个函数。
当调用resolve意味着操作成功。
当调用reject意味着操作失败。
resolve和reject都只会执行一次。
then 函数会在promise执行完毕之后调用。
第一个参数回调函数会在resolve成功后调用,第二个回调函数会在reject触发后调用。
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
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
带参数并且多重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协议许可协议。转载请注明出处!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。