NodeJS: Как ожидать асинхронный скрипт, вызываемый runInNewContext? - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь выполнить пользовательский объект Script , используя 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 Ответ

0 голосов
/ 20 января 2020

Вы должны:

  1. заставить исходную функцию возвращать обещание
  2. ожидать этого обещания при вызове runInNewContext.

Поэтому, скажем, Вы хотите вернуть пользовательский объект:

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

Затем добавьте здесь await

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

, как будто вы пытаетесь напечатать значение result, это будет обещание, поэтому добавление await сделает то, что вы пытаетесь достичь

...