Ich versuche eine Funktion wie async / await in C # auszuführen, aber in Knoten js Ich habe ein Beispiel gefunden Es gibt mir einen Fehler.

Hier ist der Code

function* gotNews(response){    
        console.log("in gotNews");
        str='';
        response.on('data', function (chunk) {
            str += chunk;
        });    
        response.on('end', function () {
              str = JSON.parse(str);
              console.log(str);
              fetchCategories();
        });
        return str;
}


function fetchNews(sourceURL){
        console.log("in fetch news");
             sourceURL = url.parse(sourceURL);
             console.log(sourceURL);
        var options = 
        {
            host: sourceURL.host,
            port: 134,
            path: sourceURL.path,

            method: 'GET',
        };
        var req = http.request(options,yield gotNews);//start request and recive response in gotSources
        req.end();
}

Ich verwende die * Yield-Operation, erhalte aber einen Fehler

ErrorC:\Users\Alaa\Desktop\Fluid_layout_with_jQuery_Masonry\1\app.js:198
        var elnewselygat = yield gotNews();
                                 ^^^^^^^
SyntaxError: Unexpected identifier
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:901:3
4
Mohamed Naguib 20 Nov. 2013 im 15:42

3 Antworten

Beste Antwort

Sie benötigen Generatoren und , um es so einfach wie async / await / Task zu machen.

Wie @Paul sagte, sind Generatoren eine "zukünftige Funktion", daher müssen Sie --harmony oder --harmony-generators übergeben. Generatoren werden auch in V8 3.19 unterstützt, das nur in Node.js 0.11.2 oder neuer enthalten ist.

Die JavaScript-Community erwägt derzeit eine Reihe möglicher Ansätze. Es gibt einen guten Überblick über einige von ihnen hier und Es gibt auch andere Bibliotheken.

2
Stephen Cleary 20 Nov. 2013 im 12:33

Sie können async/await mit babel --stage 1 --optional runtime verwenden.

0
Jason Livesay 26 Juli 2015 im 19:12

Prüfen: https://github.com/luciotato/waitfor-es6

Mit Generatoren macht es, was Sie wollen. (keine Versprechen erforderlich)

Funktion * ----> c # async

Ausbeute wait.for (fn ...) ---> c # warte

0
Lucio M. Tato 4 Dez. 2013 im 16:13