我有一个节点应用程序,该应用程序接收带有多个对象的发布请求以添加到数据库中,并且对于对象,需要发生涉及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)
},
答案 0 :(得分:3)
您的问题与范围和闭包有关:
issues = []
我猜想这个变量是在bulkAdd
方法之外声明的。如果不是这样,则在没有var
或let
关键字的情况下声明它实际上是将变量放在全局范围内。
您需要在本地范围内定义方法的变量:
bulkAdd: async function (req, callback) {
let issues = [];