2013-11-20 66 views
4

我想在C#中執行類似於async/await的功能,但是在節點js中 我找到了example,但它給了我一個錯誤。async/await在Nodejs中替換

這裏是

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(); 
} 

我現在用的是*產操作的代碼,但給我一個錯誤

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 
+0

它是什麼特殊功能*(我的意思是STAR)?我從來沒有見過這樣的函數聲明 – tomekK

+0

@tomekK * in *函數是你的async關鍵字。產量是您的等待關鍵字。 –

+0

哦,對不起,愚蠢的問題。我應該先查看鏈接 – tomekK

回答

2

你需要的發電機承諾,使其容易爲async/await/Task

正如@Paul所述,發電機是「未來功能」,因此您需要通過--harmony--harmony-generators。此外,V8 3.19支持生成器,它僅在Node.js 0.11.2或更新的版本中支持。

JavaScript社區目前正在考慮一些可能的方法;有幾個here的好概述,還有其他庫。

0

您可以使用async/awaitbabel --stage 1 --optional runtime