在JS里代码执行大都是单线程的,如果要在一个线程中处理多个事物,就需要使用异步回调。既可以通过回调函来实现异步回调,也可以使用Promise机制来实现异步回调。
下面介绍,js里Promise的使用和简写。
1、需求
- 用Promise来判断[0,100)之间的数,若数小于50,则返回OK,否则返回failed。
2、初始代码
//one.js
function test(resolve,reject) {
var num = Math.random()*100; //[0,100) 随机数(包括整数和小数)
var resNum = Math.round(num); //[0,100) 随机整数(四舍五入)
setTimeout(function () {
if (resNum < 50) {
resolve('200 OK resNum= '+resNum);
} else {
reject('failed,resNum= '+resNum);
}
},1*1000);
}
var p1 = new Promise(test);
var p2 = p1.then(function (result) {
console.log('成功:'+result);
});
var p3 = p2.catch(function (reason) {
console.log('失败:'+reason)
});
3、promise分支合并
//two.js
function test(resolve,reject) {
var num = Math.random()*100; //[0,100) 随机数(包括整数和小数)
var resNum = Math.round(num); //[0,100) 随机整数(四舍五入)
setTimeout(function () {
if (resNum < 50) {
resolve('200 OK resNum= '+resNum);
} else {
reject('failed,resNum= '+resNum);
}
},1*1000);
}
//3) 简化2
new Promise(test).then(function (result) {
console.log('成功:'+result);
}).catch(function (reason) {
console.log('失败:'+reason);
});
4、函数主体与promise分支合并
//three.js
//4) 简化3
new Promise(function (resolve,reject) {
var num = Math.random()*100; //[0,100) 随机数(包括整数和小数)
var resNum = Math.round(num); //[0,100) 随机整数(四舍五入)
setTimeout(function () {
if (resNum < 50) {
resolve('200 OK resNum= '+resNum);
} else {
reject('failed,resNum= '+resNum);
}
},1*1000);
}).then(function (ok) {
console.log('成功:'+ok);
}).catch(function (err) {
console.log('失败:'+err)
})
效果如下: