Javascript 等待aysnc为每个人打电话
我有一个函数,在返回jsonObject之前,我想在每个循环上完成第一个Javascript 等待aysnc为每个人打电话,javascript,asynchronous,vuejs2,es6-promise,Javascript,Asynchronous,Vuejs2,Es6 Promise,我有一个函数,在返回jsonObject之前,我想在每个循环上完成第一个this.findLocation()。问题是当函数返回jsonObject时,一些findlocation循环仍然没有完成 这是函数的代码: generate (item) { let jsonObj = {} jsonObj.lookup = this.id this.fields.forEach(field => { if (field.prop === 'API') {
this.findLocation()
。问题是当函数返回jsonObject时,一些findlocation
循环仍然没有完成
这是函数的代码:
generate (item) {
let jsonObj = {}
jsonObj.lookup = this.id
this.fields.forEach(field => {
if (field.prop === 'API') {
this.findLocation(item, field).then(function (value) {
let location = value
if (location) jsonObj[field.prop] = location.id
})
} else {
jsonObj[field.prop] = item[field.header]
}
})
return jsonObj
}
任何帮助都将不胜感激。您需要使用
承诺。所有等待每个异步操作完成:
generate (item) {
const obj = { lookup: this.id };
const proms = this.fields.map((field) => {
if (field.prop === 'API') {
// Make sure to *return* the `Promise`:
return this.findLocation(item, field).then((value) => {
if (value) obj[field.prop] = value.id
})
} else {
obj[field.prop] = item[field.header]
}
});
return Promise.all(proms)
.then(() => obj);
}
请注意,当像这样使用.map
时,数组中只有一些项是承诺,但这很好-承诺。所有都只会等待数组中的承诺得到解决。数组中的非承诺(包括未定义的值)将被忽略
而且一如既往,,
-如果你有一个对象或数组,那么你有一个对象或数组,句号。JSON格式是一种用字符串表示对象的方法,如constmyjson='{“foo”:“bar”}'
。如果不涉及字符串、序列化或反序列化,则也不涉及JSON。在重复文章中,介绍了如何使用Promise.all
处理异步调用集合。