Как внедрить переменную в закрытие функции (Node.js VM)?

Предположим, у меня есть этот код:

      import vm from 'node:vm';

const code = `
const baz = "qux";
foo(() => { console.log(bar, baz) })
`;

const context = {
  foo: (routine: Function) => {
    console.log(routine());
  },
};

vm.createContext(context);

vm.runInNewContext(code, context);

Когда виртуальная машина запускается, она запускаетfooобратный вызов в контексте, который затем оценивает функцию, которая затем регистрирует — как мне ввести только вroutineзакрытие?

Я хотел бы иметь возможность сделать что-то вроде этого:

      const context = {
  foo: (routine: Function) => {
    vm.runInNewContext(routine(), {bar: 'A'})
    vm.runInNewContext(routine(), {bar: 'B'})
  },
};

Я думаю, что единственный способ - преобразовать функцию обратно в строку, но тогда вы потеряете родительское закрытие, которое мне также нужно, т.е.

      import vm from 'node:vm';

const code = 'const baz = "qux"; foo(() => { console.log(bar, baz) })';

const context = {
  foo: (routine: Function) => {
    vm.runInNewContext('(' + routine.toString() + ')()', {
      bar: 'A',
    });
  },
};

vm.createContext(context);

vm.runInNewContext(code, context);

Это вызовет ошибку оbarнедоступность.

0 ответов

Другие вопросы по тегам