Javascript 使用香草承诺的RSVP哈希
具有允许“检索”引用的帮助器:Javascript 使用香草承诺的RSVP哈希,javascript,promise,async-await,rsvp.js,Javascript,Promise,Async Await,Rsvp.js,具有允许“检索”引用的帮助器: var承诺={ posts:getJSON(“/posts.json”), 用户:getJSON(“/users.json”) }; hash(承诺).then(函数(结果){ console.log(results.users)//打印users.json结果 console.log(results.posts)//打印posts.json结果 }); 有没有办法用香草承诺(在现代ES中)来做这样的事情呢?OOTB?不,只有Promise.all,但它接受数组
var承诺={
posts:getJSON(“/posts.json”),
用户:getJSON(“/users.json”)
};
hash(承诺).then(函数(结果){
console.log(results.users)//打印users.json结果
console.log(results.posts)//打印posts.json结果
});
有没有办法用香草承诺(在现代ES中)来做这样的事情呢?OOTB?不,只有
Promise.all
,但它接受数组,而不是字典。但是,您可以创建一个助手函数,该函数接受承诺字典,转换为数组,在其上运行Promise.all
,并使用另一个对其进行处理,然后将结果数组转换回字典。这并不难实现
async function hash(promiseObj) {
// Deconstitute promiseObj to keys and promises
const keys = [];
const promises = [];
Object.keys(promiseObj).forEach(k => {
keys.push(k);
promises.push(promiseObj[k]);
});
// Wait for all promises
const resolutions = await Promise.all(promises);
// Reconstitute a resolutions object
const result = {};
keys.forEach((key, index) => (result[key] = resolutions[index]));
return result;
}
hash({
foo: Promise.resolve(8),
bar: Promise.resolve(16),
}).then(results => console.log(results));
(如果目标运行时有Object.entries,也可以使用它。)