Ram*_*aro 3 javascript async-await es6-promise
我有一个以 Promise 作为其值的对象。对象字段可以具有不同类型的值,例如函数、promise、字符串、数字或其他对象。如何实现一个等待对象中所有承诺解析的函数?
const asyncFunction = () => {
return Promise.resolve("Resolved!")
}
const nonAsyncFunction = () => {
return "Resolved!"
}
const awaitObjectWithPromise = (obj) => {
// Returns a promise which waits for all
// the promises inside "obj" to be resolved.
}
let obj = {
key1: asyncFunction(),
key2: nonAsyncFunction(),
key3: "Some Value",
parent1: {
key1: asyncFunction(),
key2: nonAsyncFunction(),
key3: "Some Value"
}
}
awaitObjectWithPromise(obj).then((obj) => {
console.log(obj);
// Should output:
// {
// key1: "Resolved!",
// key2: "Resolved!",
// key3: "Some Value",
// parent1: {
// key1: "Resolved!",
// key2: "Resolved!",
// key3: "Some Value"
// }
// }
})
Run Code Online (Sandbox Code Playgroud)
在接受的答案中,我对某些事情不满意:
null
如果其中一个字段是or ,则会引发错误undefined
;为了解决这些问题,我更改了函数:
const promiseAll = async (obj) => {
if (obj && typeof obj.then == 'function') obj = await obj;
if (!obj || typeof obj != 'object') return obj;
const forWaiting = [];
Object.keys(obj).forEach(k => {
if (obj[k] && typeof obj[k].then == 'function') forWaiting.push(obj[k].then(res => obj[k] = res));
if (obj[k] && typeof obj[k] == 'object') forWaiting.push(promiseAll(obj[k]))
});
await Promise.all(forWaiting);
return obj;
}
Run Code Online (Sandbox Code Playgroud)
也许对某人来说,这会有用。
归档时间: |
|
查看次数: |
2196 次 |
最近记录: |