在ES6中,yield和generator函数允许等待一次函数执行。但我想等待多个发电机。 代码如下:
files.forEach(function* (file) {
const uploadedFile = yield call([service, service.upload], file, config)
}
call
是redux-saga效果
为了表达Saga逻辑,我们从Generator生成纯JavaScript对象。我们称之为对象效果
我想一次性启动所有上传,无需等待上一次完成并等待所有文件上传后,是否可以使用yield
?
答案 0 :(得分:6)
我一直在寻找的是:
// correct, effects will get executed in parallel
const [users, repos] = yield [
call(fetch, '/users'),
call(fetch, '/repos')
]
call
这里只是回复承诺
当我们产生一系列效果时,生成器会被阻塞,直到所有效果都被解决或者一旦被拒绝(就像Promise.all的表现一样)。
答案 1 :(得分:1)
您可以使用Promise.all()代替
示例:强>
如果要在完成所有上传后重新启动对代码的控制,可以使用async / await接口:
function uploadALL(files){
const uploadedFilesPromises = files.map( file => {
return call([service, service.upload], file
})
}
return Promise.all(uploadedFilesPromises);
}
// samples of using this function:
uploadALL(files).then((uploadedFiles)=> { .... })
// or in async function you can use await:
const uploadedFiles = await uploadAll(files)
你的#34;电话"方法应该返回一个Promise对象,否则你必须将它包装到Promise中。