解决 javascript 个对象中的 Promises
Resolving Promises within javascript objects
我有一个 JavaScript 对象,里面有未解决的承诺。什么是最优雅和最简单的方法来解决对象中的所有这些承诺并仅在所有这些承诺都得到解决后才继续下一个 'then' 块?
var Promise = require('bluebird')
var _ = require('lodash')
Promise.all(fetchSomeData)
.then(data => {
/* 'data' contents:
[
{
foo: 'foo1',
bar: 'bar1',
datatofetch: new Promise((resolve,reject) => {...})
},
{
foo: 'foo2',
bar: 'bar2',
datatofetch: new Promise((resolve,reject) => {...})
},
{
foo: 'foo3',
bar: 'bar3',
datatofetch: new Promise((resolve,reject) => {...})
}
...
]
*/
return // TODO: 'data' object with resolved promises
})
.then(dataWithResolvedPromises => {
// do something with dataWithResolvedPromises
})
您可以使用两个不同的 Promise.all
调用,并在解决后将第二个的结果简单地映射回第一个的结果
var Promise = require('bluebird')
var _ = require('lodash')
var myObjects
Promise.all(fetchSomeData)
.then(data => {
myObjects = data;
return Promise.all(data.map(d => d.datatoFetch)
})
.then(fetched => fetched.map((result, i) => _.extend({}, myObjects[i], { dataToFetch: result })))
.then(dataWithResolvedPromises => {
// do something with dataWithResolvedPromises
})
结合使用 Promise.props
和 Promise.all
似乎是解决此问题的最简单方法。
Promise.all(fetchSomeData)
.then(data => {
return Promise.map(data, Promise.props)
})
.then(dataWithResolvedPromises => {
// do something with dataWithResolvedPromises
})
.catch(err => {
console.log(err)
})
我有一个 JavaScript 对象,里面有未解决的承诺。什么是最优雅和最简单的方法来解决对象中的所有这些承诺并仅在所有这些承诺都得到解决后才继续下一个 'then' 块?
var Promise = require('bluebird')
var _ = require('lodash')
Promise.all(fetchSomeData)
.then(data => {
/* 'data' contents:
[
{
foo: 'foo1',
bar: 'bar1',
datatofetch: new Promise((resolve,reject) => {...})
},
{
foo: 'foo2',
bar: 'bar2',
datatofetch: new Promise((resolve,reject) => {...})
},
{
foo: 'foo3',
bar: 'bar3',
datatofetch: new Promise((resolve,reject) => {...})
}
...
]
*/
return // TODO: 'data' object with resolved promises
})
.then(dataWithResolvedPromises => {
// do something with dataWithResolvedPromises
})
您可以使用两个不同的 Promise.all
调用,并在解决后将第二个的结果简单地映射回第一个的结果
var Promise = require('bluebird')
var _ = require('lodash')
var myObjects
Promise.all(fetchSomeData)
.then(data => {
myObjects = data;
return Promise.all(data.map(d => d.datatoFetch)
})
.then(fetched => fetched.map((result, i) => _.extend({}, myObjects[i], { dataToFetch: result })))
.then(dataWithResolvedPromises => {
// do something with dataWithResolvedPromises
})
结合使用 Promise.props
和 Promise.all
似乎是解决此问题的最简单方法。
Promise.all(fetchSomeData)
.then(data => {
return Promise.map(data, Promise.props)
})
.then(dataWithResolvedPromises => {
// do something with dataWithResolvedPromises
})
.catch(err => {
console.log(err)
})