1. 程式人生 > >拿JS非同步函式返回值的幾種方式

拿JS非同步函式返回值的幾種方式

在我們的編碼過程中,為了滿足業務需求,經常需要獲取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);
})