在我们的编码过程中,为了满足业务需求,经常需要获取JS异步函数的返回值。今天就来汇总一下拿值的几种方式。
1,通过回调函数的方式来拿返回值,这个想必大家不会陌生
function getSomething(cb) {
var r = 0;
setTimeout(function() {
r = 2;
cb(r)//回调函数
},10)
}
function compute(x) {
alert(x * 2);
}
getSomething(compute);
2.通过promise的方式,这个之前有做过详细的介绍
function getSomething() {
var r = 0;
return new Promise(function(resolve) {
setTimeout(function(){
r = 2;
resolve(r);
},10)
})
}
function compute(x) {
alert(x * 2);
}
getSomething().then(compute);
3.通过async的方式
function getSomething() {
var r = 0;
return new Promise(function(resolve) {
setTimeout(function() {
r = 2;
resolve(r);
},10)
})
}
async function compute() {
var x = await getSomething();
alert(x * 2);
}
compute();
4.通过generator方式实现
function getSomething() {
var r = 0;
setTimeout(function() {
r = 2;
it.next(r);
},10);
}
function *compute(it) {
var x = yield getSomething();
alert(x * 2);
}
var it = compute();
it.next();
//同步的写法实现异步的逻辑
5.通过promise和generator相结合的方式
function getSomething() {
var r = 0;
return new Promise(function(resolve) {
setTimeout(function() {
r = 2;
resolve(r);
},10)
})
}
function *compute() {
var x = yield getSomething();
alert(x * 2);
}
var it = compute();
it.next().value.then(function(value) {
it.next(value);
})