2017年10月16日 星期一

get callback's return value inside synchronous function

最近在幫別人改 Node.js 的 code
由於他的寫法是同步,但是又使用 callback 方式

原本以為在改架構時,可以簡單的改成 return 形式
但卻撞到不知名的 bug
試了一下才知道在 callback 中的 reurn 不等於呼叫 callback 的 function 的 return
如果直接 return,此時的 var a 會是 undefined

抱歉,不熟 Node.js 不知要怎麼形容
記錄一下,以後再來找答案


function test(callback) {
    console.log("in test");

    var usage = Math.floor((Math.random() * 100) + 1);

    if ((usage%2) == 0) {
        callback(true);
    } else {
        callback(false);
    }

    console.log("exit test");
}

function b() {
    console.log("in b");

    var res;
    test(function(result) {
        console.log("in test callback", result);
        /*
        if (result) {
            return true;
        } else {
            return false;
        }
        */
        res = result;
    });

    console.log("after test");
    return res;
}

var a = b();

console.log("after b");
console.log(a);

沒有留言:

張貼留言