我是Async JS的新手。我在Firefox中添加了以下功能:
function addFoosToUrl(url, foos) {
var promises = []
foos.forEach(foo => {
entry = { foo: foo, url: url }
let promise = PlacesUtils.fooStuff.insert(entry)
promises.push(promise)
})
return Promise.all(promises)
}
它按预期工作。函数PlacesUtils.keywords.insert
在数据库中插入一个条目,并返回一个在完成后解析为null
的Promise。因此,正如Promise.all()
documentation所期望的那样,我的函数在插入所有条目后返回一个Promise,从PlacesUtils.keywords.insert
解析为一个已解析值的数组,这是一个空数组。
似乎应该有一种方法来包装Promise.all()
,以便我返回的Promise解析为对链接有用的东西,比如说url
。有一种巧妙的方法吗?
答案 0 :(得分:2)
Promise.all()返回另一个promise对象。看起来,你可以使用。然后链接从那里得到任何你想要的东西。
答案 1 :(得分:1)
将a。然后链接到返回Promise - 就像这样
function addFoosToUrl(url, foos) {
var promises = []
foos.forEach(foo => {
entry = { foo: foo, url: url }
let promise = PlacesUtils.fooStuff.insert(entry)
promises.push(promise)
})
return Promise.all(promises).then(() => url);
}
或者,更简洁
function addFoosToUrl(url, foos) {
return Promise.all(foos.map(foo => PlacesUtils.fooStuff.insert({ foo: foo, url: url }))).then(() => url);
}