Ich habe hier bei stackoverflow einige Fragen zu diesem Thema gelesen, aber keine davon scheint meine Zweifel zu beantworten.

Ich weiß, wie asynchrone Funktionen mit process.nextTick erstellt werden:

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

Ich habe auch über Promise gelesen, aber wie schreibt man asynchrone nicht blockierende Funktionen? ohne Bibliotheken wie process, Promise usw. zu verwenden?

Was ist der native Weg? Ich dachte zuerst über diesen Ansatz nach:

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

Diese Funktionsblöcke:

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

Was ist die richtige Implementierung? Wie könnte ich asynchrone Funktionen schreiben, ohne von diesen Bibliotheken abhängig zu sein?

0
jviotti 28 Nov. 2012 im 06:54

3 Antworten

Beste Antwort

In Node.js müssen Sie process.nextTick verwenden. Im Browser können Sie den postMessage - Hack verwenden, der viel effizienter ist als setTimeout(function(){},0).

Hier ist eine browserübergreifende Implementierung des postMessage - Hacks: https : //github.com/timoxley/next-tick/blob/master/index.js

0
JP Richardson 28 Nov. 2012 im 05:58

Sie können setTimeout verwenden - es ist eine native Funktion wie eine Verzögerung.

1
AChudov 28 Nov. 2012 im 02:59

Teilen Sie die Arbeit Ihrer Funktion in Blöcke auf und verwenden Sie process.nextTick, um den nächsten Block in die Warteschlange zu stellen sobald der aktuelle abgeschlossen ist. Auf diese Weise können andere Rückrufe in der Warteschlange zwischen den einzelnen Arbeitsblöcken ausgeführt werden. Wenn alle Chunks abgeschlossen sind, rufen Sie den Rückruf auf, der als Parameter an Ihre Funktion übergeben wurde.

Das oben Gesagte setzt voraus, dass Ihre Funktion keine vorhandenen asynchronen APIs aufruft, wodurch Ihre Funktion natürlich asynchron wird, ohne etwas Besonderes zu tun.

0
JohnnyHK 28 Nov. 2012 im 03:35