【发布时间】:2021-10-21 16:14:53
【问题描述】:
我看到了类似的问题,但我很难将其应用到我的代码中。
我有以下代码:
createSubmission(sub: Submission, files: Files[]): Promise {
//first add files to storage and create the url array
let urlArray: string[];
return files.forEach(file => {
var storageRef = this.storage.ref(`files/${file.name}`);
return storageRef.put(file).then(()=> {storageRef.getDownloadURL().subscribe(url => {
urlArray.push(url);
if(urlArray.length === files.length){ //we are at the final element
sub.filesUrls = urlArray;
return this.finilize(sub);
}
})
});
});
}
finilize(sub: Submission){ //actually creates the submission
let subRef = this.db.database.ref(`/submissions/${sub.medicUid}`).push();
let subKey = subRef.getKey();
sub.uid = subKey;
return subRef.update(sub);
}
第一个方法的调用者 (createSubmission) 应该收到一个 Promise。当我们从finilize 方法返回时,我的代码序列就完成了。
我想在循环中的所有元素都被迭代并且urlArray 已经被填满之后继续。当它具有与传递的files 数组相同数量的元素时,它被填充,这就是我放置这个条件的原因:
if(urlArray.length === files.length){...}
但是,我收到一个错误,因为 if 条件意味着 并非所有代码路径都返回一个值。 所以我认为我应该放弃 if 条件并等待所有承诺解决在打电话给finalize之前,但我不太清楚该怎么做。
【问题讨论】:
标签: javascript async-await promise