1

自分で作成したモジュール内である種のコールバックを作成する可能性はありますか?

私の問題は、アプリケーション用のモジュールを作成したことです。このモジュール内でいくつかのタスクが実行され、メインアプリはモジュールがタスクを完了したというフィードバックを受け取る必要があります。

以下は、私が欲しいものを説明していますが、もちろん機能しません...

//module mymod.js
function start()
{
    var done = false;

    //do some tasks
    done = true;
}
exports.done = done;

メインアプリ

var mymod = require("./mymod.js");

while(!mymod.done)
{
    //do some tasks
}

誰かが私を助けてくれたらとてもうれしいです。

PS:この状況で子プロセス(フォーク)を試しましたが、プロセス全体をコピーしているように見えるため、開いているOpenCVビデオキャプチャにアクセスできなくなりました... :(モジュールを使用することで、この問題は発生しませんが、代わりにこれが発生しますそれのための1つ^^

4

2 に答える 2

9

はい、モジュールからコールバックを取得できます。

それは次のように簡単です

function funcWithCallback(args, callback){
    //do stuff

    callback();
}

何を達成しようとしているのかはわかりませんが、while ループは疑わしいようです。おそらく、npm の async パッケージに投資する必要があります。

github での非同期

編集:何かを明確にする必要があると感じました。上記の関数は、実際には戻り値の代わりにコールバックが使用されることを意図していますが、正確には非同期ではありません。

真の非同期アプローチは、次のようなことです。

function funcWithCallback(args, callback){      
    process.nextTick(function() {
        //do stuff
        callback();
    });     
}

これにより、呼び出された関数が終了し、次のティックまでその関数のロジックの実行が延期されます。

于 2013-08-22T13:55:02.343 に答える
6

コールバック構文:

function start(callback)
{


    //do some tasks

    callback(data);
}

exports.start = start;

モジュールが必要な場所ならどこでも:

var mymod = require("./mymod.js");

mymod.start(function(data) {
   //do some tasks , process data

});
于 2013-08-22T13:57:37.867 に答える