簡體   English   中英

兩個不同的POST請求正在使用相同的變量

[英]Two different POST requests are making use of the same variable

我有一個節點應用程序,該應用程序接收帶有多個對象的發布請求,以將其添加到數據庫中,並且對於對象,需要發生涉及dropbox api的一系列事情。 完成一個對象的全部任務大約需要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)
}, 

您的問題與范圍和閉包有關:

issues = []

我猜這個變量是在bulkAdd方法之外聲明的。 如果不是,則在不使用varlet關鍵字的情況下聲明它實際上是將變量置於全局范圍內。

您需要在本地范圍內定義方法的變量:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM