我不确定我做的是否正确。根据某些变量集,我有一系列响应。我想兑现承诺,以便他们完成应用程序后再运行下一行代码。这是我的代码:
const promises = []
if (this.score >= this.scoreNeeded) {
this.correct = true
this.retrieveCode(this.clueorder)
this.feedback = 'Congrats you are moving on. Here is your next code '
} else {
console.log('1')
if (locimgface && !this.smile) {
this.feedback += 'You need to smile in your picture. '
}
if (locimgfacesurprise && !this.surprise) {
this.feedback += 'You need to look very surprised in your picture. '
}
if (locimgfacesorrow && !this.sorrow) {
this.feedback += 'You need to look really sad in your picture. '
}
if (locationimagetexton && !this.atLocation) {
this.feedback += 'We could not find the text in the image. It needs to have one of these words "' + locationimagetextwithspaces + '" somewhere in the picture. '
}
if (locationimagelabelon && !this.foundItem) {
this.feedback += 'We could not find the item in the image. It needs to have one of these items "' + locationimagelabelswithspaces + '" somewhere in the picture. '
}
promises.push(this.feedback)
Promise.all(promises).then(() => {
console.log('completed from promise');
this.deleteImage(this.fullPath)
}).catch(err => {
console.log(`ERROR: ${JSON.stringify(err)}`);
})
}
我想做的是确保所有反馈消息均已正确设置,然后运行deleteImage函数,此外在代码块中获得了良好的成绩,我想在发布代码之前等待来自retrieveCode的响应。反馈。
一如既往,所有帮助都将受到赞赏。
更新:
我可能做错了,但是有多个触发器。
如果代码缺少一个或多个,则需要让用户知道缺少的内容,即程序正在寻找微笑,并且一些文本和图片与文本一起提交但没有微笑,用户应该得到反馈消息,让他们知道他们需要在图片中微笑。
如果程序正在寻找令人惊讶的外观,文字和标签,并且用户提交了带有令人惊讶的外观和文字的图片,则他们将收到一条反馈消息,告知他们需要包含标签。
如果程序正在寻找微笑,文本和标签(“汽车”),并且用户提交的图片都不包含这些内容,则他们会收到一条反馈消息,表示需要微笑,他们需要提供缺少的文本他们需要在图片中有辆车。
对于缺少的每个项目,都会向用户提供具体的反馈,以帮助他们。
最终目标是构建反馈消息,然后运行下一个功能。取决于用户的得分,可以是deleteImage()或retrieveCode()
更新2
这是deleteImage函数
deleteImage (fullPath) {
console.log('2')
let storage = firebase.storage();
let storageRef = storage.ref();
// Create a reference to the file we want to delete
let imageRef = storageRef.child(fullPath);
imageRef.delete().then(() => {
console.log('3')
this.reset()
})
.catch((error) => {
console.error(`file delete error occurred: ${error}`)
})
},
更新3:
这是retrieveCode()函数。
retrieveCode(clueorder) {
// get the next clue by adding 1 to this clue
const newclue = this.getNextClue(clueorder)
this.$store.dispatch('retrieveCode', {
newclue: newclue,
oldclue: clueorder
});
}
答案 0 :(得分:1)
在MDN页上:
Promise.all()方法返回一个Promise,当作为可迭代对象传递的所有promise已解决或可迭代对象不包含promise时,该Promise就会解决。
让我们创建一个真正的基本函数,该函数返回一个Promise
(使用Promise.resolve
),该函数返回您传递的字符串。
// You could use new Promise(resolve => resolve(str));
const fetchData = str => Promise.resolve(str)
// Array of promises to wait on
const data = [
fetchData('foo'),
fetchData('bar'),
fetchData('baz')
];
Promise.all(data).then(responses => {
console.log(responses);
});
您也不必返回Promises
,只需传递一个字符串数组,Promise.all
就会“解析”这些字符串。
// You could use new Promise(resolve => resolve(str));
const fetchData = str => str
// Array of promises to wait on
const data = [
fetchData('foo'),
fetchData('bar'),
fetchData('baz')
];
Promise.all(data).then(responses => {
console.log(responses);
});