2

Q モジュールを使用して、作業中のプロジェクトに promise を実装しています。静的メソッド Q.fncall() を使用して、node.js スタイル関数 (err,result を返すコールバックに基づく) からプロミスを作成しています。

問題は、一定時間後にその関数の実行を停止する必要があることです。そのため、Qモジュールの関数「タイムアウト」を使用しました。したがって、x 時間後、done 関数の「エラー」コールバックが実行され、タイムアウトを処理しましょう。ただし、ハンドラーがリッスンしていなくても、関数自体は最後のコールバックに到達するまで実行され続けます。

問題は、タイムアウトが実行された後に関数の実行を停止する方法はありますか? タイムアウト ハンドラーに変数を設定し、タイムアウトが終了した場合に関数をチェックインし続けることができることはわかっていますが、これを実現するためのよりクリーンな方法を望んでいます。

コードは次のとおりです。

        Q.nfcall(test1, id)
        .timeout(1000)
        .done(
            function (value) {
                console.log("SUCCESS: " + value);
            }, 
            function (reason) {
                console.log("ERROR " + reason);
            },
            function (progress) {
                console.log("PROGRESS " + progress);
            }
        );

そして test1 関数:

function test1(id,callback){
db_rw_pool.query("SELECT * FROM table WHERE id=?",[id], function(err,result) {
    if(err){
        callback(err,null);
    }
    else {
        setTimeout(function(){
            console.log("I DON'T WANT YOU TO BRE PRINTED")
            callback(null,result);
        },2000);

    }
    return;
});

}

私の理想的な状況では、 setTimeout(...,2000) 内のコードは決して実行されるべきではありません。これは可能ですか?

前もって感謝します。

4

2 に答える 2