gpt4 book ai didi

javascript - 如何使用reduce正确链接promise

转载 作者:行者123 更新时间:2023-12-01 01:26:42 25 4
gpt4 key购买 nike

我有一个系统想要使用 API 在 Dropbox 中创建许多文件夹,但是我似乎尝试一次创建所有文件夹,这会导致生成错误,表明我从 Dropbox 执行了太多写入操作。

我的代码如下,首先使用reduce来创建多个我认为是链接的 promise 。在这些 promise 中,调用了 add 函数,该函数将案例上传到 mongodb,然后为其创建一个 dropbox 文件夹,但这会导致限制错误..

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

req.reduce((promise, audit) => {
return promise.then(_ => this.add(audit, function(err,data){
if (err){
console.log('\n'+i+ ' ' + data.scanner_ui + '\n');
}
}));
}, Promise.resolve()).catch(error => {console.log(error)});
},

add: function (req, callback) {
delete req.status
var audit = new Audit(req);
if (req['status_value'] != undefined && req.status_value != ''){
console.log(req['status_value'])
audit.status = [{
status_value : req['status_value'],
status_notes : req['status_notes'],
status_date : req['status_date'],
}]
}

audit.save(function (err, data) {
if (err) {
callback(err, data)
}
else {
return dropbox_functions.createFolder(data.ui)
.then(response => {console.log(response)}, error=> {console.log('\n\n\n',error.error.error)})
.catch(error => console.log(error))
}
});

},

最佳答案

因此,您当前问题中的问题来自于您的 add 函数没有返回值,我只看到它返回未定义。

如果 Promise 在其 then/catch block 中返回除 Promise 以外的内容,它将将此输入用于以下函数,并且不会等待任何完成之前要运行的内部流程

如果在您的 then/catch block 中,您将返回一个 Promise,它会在继续下一个 then block 之前等待,因此按顺序处理您的请求。

现在,在您当前的代码中,我相信最简单的方法是在您的reduce中处理解析,因为您似乎已经被回调句柄困住了。

req.reduce((promise, audit) => {
return promise.then(_ => new Promise(
function( resolve, reject) {
this.add(audit, function(err,data){
if (err){
console.log('\n'+i+ ' ' + data.scanner_ui + '\n');
reject( err );
return;
}
resolve( data );
});
})
);
}, Promise.resolve()).catch(error => {console.log(error)});

在这种情况下,promise 要么拒绝,要么解决本身。我选择分别提交errdata,这样如果出现错误,最后会得到处理,这样你就可以得到最后保存的数据成功

关于javascript - 如何使用reduce正确链接promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53708437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com