【发布时间】:2019-05-16 17:56:23
【问题描述】:
我在 Firebase 存储中循环抛出一个文件列表,我想在循环时修改一个字符串,
这是我尝试做的:
var str;
storage.bucket().file(...).download((err, content) => {
str=content.toString();
storage.bucket().getFiles(...).then(results => {
const files = results[0];
var promise = new Promise(function(resolve,reject){
files.forEach(file => {
...
str=str.replace("t","a");
});
resolve(str);
});
Promise.all(promise).then(function(str) {
console.log(str); //NOT OKAY, the value is still "test"
file.save(str, function(err) { ... });
});
我也试过了:
promise.then(function(result) {
但结果是一样的:(
更新: 我编辑了上面的代码,但它仍然不起作用:
有什么想法吗?
更新 2:
还是不行:(
【问题讨论】:
-
请编辑问题以完整显示代码。你现在展示它的方式,不能保证你在第一个代码块中创建的承诺与你传递给 Promise.all() 的承诺是一样的。它可能超出范围。
-
如果你在内部做异步操作,不要使用
forEach。如果你不做异步操作,不要使用 Promise。 -
你为什么使用
Promise.all?你没有多个承诺,是吗? -
您的
promise变量是在then回调内部创建的,您不能在外部使用它。但是then已经为回调的返回值创建了一个承诺,就使用它吧! -
@Bergi 那么用什么来代替 Promise.all 呢?或者没有forEach怎么办?我有点失落..
标签: javascript firebase promise