在JavaScript对象文字中,是否有一种方法可以使用异步函数的结果来初始化某些字段,同时确保它们仍可以连续运行?
这是我尝试过的:
Oxadata/EXPORT
如果我编写上面的代码,async function f() { /* ... */; return 0; }
async function g() { /* ... */; return 1; }
async function init() {
const o = { f: f(), g: g() };
return o;
}
init().then(console.log)
//> { f: Promise { ... }, f: Promise { ... } }
// XXX not what I want: I want *values* not promises
和f()
是并行解析的,但是g()
和obj.f
将保留函数返回的promise,而不是解析的值。
另一方面,使用下面的语法,我得到一个对象,该对象的字段包含值,但是在我看来obj.g
和f()
调用是顺序解决的。还是我在这里错了?
g()
答案 0 :(得分:3)
否,您需要使用Promise.all
等待多个并发事件:
async function getF() { /* ... */; return 0; }
async function getG() { /* ... */; return 1; }
async function init() {
const [f, g] = await Promise.all([getF(), getG()]);
return {f, g};
}
init().then(console.log);