2017-05-21 8 views
5

मैं नोडजेएस में async/प्रतीक्षा का उपयोग करने की कोशिश कर रहा हूं लेकिन मेरी स्क्रिप्ट एक वाक्यविन्यास त्रुटि फेंक रही है।नोडजेएस स्क्रिप्ट एसिंक/प्रतीक्षा के कारण वाक्यविन्यास त्रुटि (v7.10.0)

मैं इस धारणा के तहत था कि async/await supported naively since Node 7.6 है। जब मैं node -v चलाता हूं तो मुझे v7.10.0 मिलता है।

यहाँ index.js की सामग्री है:

async function getValueAsync() { 
    return new Promise(function(resolve) { 
     resolve('foo'); 
    }); 
} 

let value = await getValueAsync(); 
console.log(value); 

लेकिन जब मैं node index.js साथ इस स्क्रिप्ट आह्वान मैं:

let value = await getValueAsync(); 
        ^^^^^^^^^^^^^ 
SyntaxError: Unexpected identifier 
    at createScript (vm.js:53:10) 
    at Object.runInThisContext (vm.js:95:10) 
    at Module._compile (module.js:543:28) 
    at Object.Module._extensions..js (module.js:580:10) 
    at Module.load (module.js:488:32) 
    at tryModuleLoad (module.js:447:12) 
    at Function.Module._load (module.js:439:3) 
    at Module.runMain (module.js:605:10) 
    at run (bootstrap_node.js:427:7) 
    at startup (bootstrap_node.js:151:9) 

मैं लिनक्स टकसाल 18.1 चल रहा हूँ।

मैं अपनी स्क्रिप्ट को संकलित और चलाने के लिए कैसे प्राप्त कर सकता हूं? ,

void async function() { 
    let value = await getValueAsync(); 
    console.log(value); 
}(); 

और वापसी मान के बाद से, async कार्यों से एक वादा द्वारा लिपटे रहे हैं आप:

उत्तर

6

awaitasync कार्यों के अंदर ही मान्य है, तो आप की जरूरत है, उदाहरण के लिए, एक async IIFE अपने कोड के साथ रैप करने के लिए getValueAsync बस इस को छोटा कर सकते हैं:

async function getValueAsync() { 
    return 'foo'; 
} 

या async के रूप में चिह्नित नहीं है और इसे से एक वादा वापसी:

function getValueAsync() { 
    return new Promise(function(resolve) { 
    resolve('foo'); 
    }); 
} 
+0

लेकिन के अनुसार [MDN दस्तावेजीकरण] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await) एक 'await' भी एक समारोह पर इस्तेमाल किया जा सकता जो 'वादा' देता है। असल में 'async' फ़ंक्शन को 'वादा' वापस कर देता है। तो मैं उलझन में आया। –

+0

ठीक है, मुझे मिल गया, 'प्रतीक्षा' हमेशा 'async' फ़ंक्शंस में डाला जाना चाहिए। डॉक्टर के अनुसार। 'प्रतीक्षा' अभिव्यक्ति 'async' फ़ंक्शन निष्पादन को तब तक रोकने का कारण बनती है जब तक' वादा 'पूरा नहीं हो जाता है या अस्वीकार नहीं किया जाता है, और पूर्ति के बाद' async' फ़ंक्शन के निष्पादन को फिर से शुरू करने के लिए। जब फिर से शुरू किया गया, 'प्रतीक्षा' अभिव्यक्ति का मूल्य पूर्ण 'वादा' का है। इसलिए मेरे पास कभी भी शीर्ष लीवर 'प्रतीक्षा' घोषणा नहीं हो सकती है। –

संबंधित मुद्दे