0

外部モジュールを呼び出すノードサーバーがあります。私の問題は、モジュールの呼び出しによってデータを返す必要があるのに、ノード(非ブロッキング)が単に戻り値を待機していないことです。これに対する解決策はありますか?

コード:

Server.js

var value = module.functionA(param);
console.log("Message one %s", value);

Module.js

function callToFunctionInModule(param){
console.log("In func");
return param+2;
}

exports.functionA = function(param){
console.log("Message two");
var returnVal = callToFunctionInModule(param);
return returnVal;
};

Ouput

Message two
Message one undefined
In func

とにかく次の出力を取得することはできますか(行var value = module.functionA(param);でコールバックを使用せずにモジュールから戻り値を取得するのを待っています。

4

1 に答える 1

2

まず、指定したコード (同期) は実際の状況 (非同期) を表していません。非同期のものを処理したい場合にすべきことは、コールバックを使用することです。それが node.js の背後にある全体的な考え方です - イベント駆動型*ネス*。

サーバー.js

module.functionA(param, function(val) {
    console.log("Message one %s", val);
});

Module.js

function callToFunctionInModule(param, cb) {
    console.log("In func");
    /* some db query */
    not_so_magical_async_stuff("blah", function(/* value passed as argument */) {
        cb(param + 2 /* or the value passed as an argument to this function */);
    }
}

exports.functionA = function (param, cb) {
    console.log("Message two");
    callToFunctionInModule(param, cb);
};

に渡された関数functionAは に渡されcallToFunctionInModule、返された値を引数としてコールバックします。結果: ノンブロッキングの美しいコード! 信じてください、一度この非同期処理にハマってしまえば、きっと気に入っていただけるはずです!

于 2012-09-13T20:53:03.363 に答える