Функция Azure Durable только при первом вызове при запуске не возвращает результаты fs.readdirSync, все последующие исправны - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть долговременная функция Azure с кодом оркестратора, который выглядит примерно так:

module.exports = df.orchestrator(function* (context) {

  const dirName = yield context.df.callActivity("CreateTmpDir");

  yield context.df.callActivity("DownloadFile", dirName);

  let parallelTasks = [];

  const files = yield context.df.callActivity("GetFiles", dirName);

  for (const file of files) {
    yield parallelTasks.push(context.df.callActivity("ProcessFile", `${dirName}/${file}`));
  }

  const results = yield context.df.Task.all(parallelTasks);
  return;
});

Функция действия GetFiles выглядит примерно так:

module.exports = async function (context) {
  const files = await getFiles(context.bindings.path, context);
  return files
};

const getFiles = (dir, context) => {
  return new Promise((resolve, reject) => {
    fs.readdir(dir, function(err, list) {
      err ? reject(err) : resolve(list);
    })
  })
}

Когда я использую AzureПлагин VSCode функции для локального запуска функции, первый запрос при первом ее вращении никогда не запускает функцию действия ProcessFile.Также нет ошибки, так как просто нет массива строк для имен файлов, возвращаемых из GetFiles.

Однако каждый запрос после этого работает, как ожидалось.

Дополнительные примечания: CreateTmpDir создает новый каталог с каждым вызовом функции, а DownloadFile извлекает файл с удаленного компьютера и помещает его в этот TmpDir после разделения его на несколько файлов.

Я действительно сбит с толку - любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...