मैं Script ऑब्जेक्ट निष्पादित करने का प्रयास कर रहा हूं: //nodejs.org/api/vm.html#vm_vm_runinnewcontext_code_contextobject_options" rel="nofollow noreferrer">runInNewContext।

let myScript = (async () => {
  let response = await fetch('/article/promise-chaining/user.json');
  let user = await response.json();
})();

let vm = new Script(myScript, myScriptOptions);

let result = vm.runInNewContext(mySandbox, myContextOptions);
console.log("Done running!");

हालांकि, मैं जिस समस्या का सामना कर रहा हूं वह यह है कि मैं चाहता हूं कि runInNewContext वास्तव में myScript के एसिंक्रोनस फ़ंक्शन के चलने तक प्रतीक्षा करें। दूसरे शब्दों में, मैं चाहूंगा कि "डन रनिंग!" प्रत्युत्तर प्राप्त होने के बाद मुद्रित किया जाना है। क्या यह संभव है? कृपया मैं इसे कैसे प्राप्त कर सकता हूँ?

1
aBlaze 20 जिंदा 2020, 08:41

1 उत्तर

सबसे बढ़िया उत्तर

आपको चाहिए:

  1. अपने मूल कार्य को एक वादा वापस करें
  2. runInNewContext को कॉल करते समय उस वादे की प्रतीक्षा करें।

इसलिए, मान लें कि आप उपयोगकर्ता ऑब्जेक्ट वापस करना चाहते हैं:

let myScript = (async () => {
  let response = await fetch('/article/promise-chaining/user.json');
  let user = await response.json();
  return user;
})();

फिर, यहां प्रतीक्षा जोड़ें

let result = await vm.runInNewContext(mySandbox, myContextOptions);

जैसे कि आप result के मान को प्रिंट करने का प्रयास करते हैं, यह एक वादा होगा इसलिए प्रतीक्षा जोड़ना वही करेगा जो आप हासिल करने की कोशिश कर रहे हैं

1
aBlaze 23 जिंदा 2020, 21:42