0

ここのstackoverflowでこのトピックに関するいくつかの質問を読みましたが、どれも私の疑問に答えていないようです。

process.nextTickを使用して非同期関数を作成する方法を知っています:

var async_function = function(val, callback){
    process.nextTick(function(){
        callback(val);
    });
};

Promiseについても読んだことがありますが、 process 、 Promise などのライブラリを使用せずに、非同期の非ブロック関数をどのように記述しますか?

ネイティブのやり方は?私はこのアプローチについて最初に考えました:

var async = function(val, cb) {
    cb(val);    
}

ただし、その関数は次をブロックします。

async(3, function(val) {
    console.log(val);
});
console.log(4);
// returns:
3
4

では、正しい実装は何ですか?これらのライブラリに依存せずに非同期関数を作成するにはどうすればよいですか?

4

3 に答える 3

1

使用できますsetTimeout-遅延のようなネイティブ関数です。

于 2012-11-28T02:59:23.183 に答える
0

Node.jsでは、を使用する必要がありますprocess.nextTickpostMessageブラウザでは、よりもはるかに効率的なハックを使用できますsetTimeout(function(){},0)

postMessageハックのクロスブラウザ実装は次のとおりです: https ://github.com/timoxley/next-tick/blob/master/index.js

于 2012-11-28T05:58:05.050 に答える
0

関数の作業をチャンクに分割しprocess.nextTick、現在のチャンクが完了したら次のチャンクをキューに入れるために使用します。そうすれば、キューに入れられた他のコールバックを作業の各チャンク間で実行できるようになります。すべてのチャンクが完了したら、関数にパラメーターとして渡されたコールバックを呼び出します。

上記は、関数が既存の非同期 API を呼び出していないことを前提としています。これにより、特別なことを何もせずに関数が自然に非同期になります。

于 2012-11-28T03:35:47.567 に答える