[英]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
方法之外聲明的。 如果不是,則在不使用var
或let
關鍵字的情況下聲明它實際上是將變量置於全局范圍內。
您需要在本地范圍內定義方法的變量:
bulkAdd: async function (req, callback) {
let issues = [];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.