拿JS非同步函式返回值的幾種方式
阿新 • • 發佈:2019-02-12
在我們的編碼過程中,為了滿足業務需求,經常需要獲取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);
})