Два разных запроса POST используют одну и ту же переменную - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть приложение узла, которое получает запрос на публикацию с несколькими объектами для добавления в базу данных, и для объекта должен произойти ряд вещей, которые включают API Dropbox.Для выполнения полного набора задач для объекта требуется около 0,5 секунды.Это означает, что если я отправлю массив из 30 объектов, это может занять 15 секунд.

Когда два клиента публикуют 30 объектов, их обработка будет перекрываться.У меня есть переменная в функции, где это происходит, которая хранит проблемы с обработкой каждого случая.Однако, когда запросы отправляются, и выполняющиеся перекрываются, ошибки обоих запросов отправляются в один и тот же массив issues.Как заставить сервер вызывать две отдельные версии функции bulkAdd.

bulkAdd: async function (req, callback) {
  issues = []

  await req.reduce((promise, audit) => {
    // return promise.then(_ => dropbox_functions.createFolder(audit.scanner_ui)
    let globalData;
  return promise.then(_ => this.add(audit)
      .then((data)=> {globalData = data; return dropbox_functions.createFolder(data.ui, data)}, (error)=> {issues.push({audit: audit, error: 'There was an error adding this case to the database'}); console.log(error)})
        .then((data)=>{console.log(data, globalData);return dropbox_functions.checkScannerFolderExists(audit.scanner_ui)},(error)=>{issues.push({audit: globalData, error: 'There was an error creating the case folder in dropbox'})})
         .then((data)=>{return dropbox_functions.moveFolder(audit.scanner_ui, globalData.ui)},(error)=>{issues.push({audit: globalData, error: 'No data folder was found so an empty one was created'}); return dropbox_functions.createDataFolder(globalData.ui)})
          .then(()=>console.log(issues))
    );
  }, Promise.resolve()).catch(error => {console.log(error)});
  return(issues)
}, 

1 Ответ

0 голосов
/ 10 декабря 2018

Ваша проблема связана с областью действия и закрытием:

issues = []

Я предполагаю, что эта переменная была объявлена ​​вне метода bulkAdd.Если это не так, объявление его без ключевого слова var или let по сути помещает переменную в глобальную область видимости.

Вам нужна переменная, локально ограниченная для метода:

bulkAdd: async function (req, callback) {
  let issues = [];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...