使用Promise.all的对象文字(哈希)

Ale*_*lls 8 javascript node.js ecmascript-6 es6-promise

我有一种情况,使用Promise.all这样的方式非常方便,Promise.all({})而不是更标准的Promise.all([]).

但这似乎不起作用

Promise.all({a:1,b:2}).then(function(val){
   console.log('val:',val);
});
Run Code Online (Sandbox Code Playgroud)

当然这当然

Promise.all([1,2,3]).then(function(val){
   console.log('val:',val);
});
Run Code Online (Sandbox Code Playgroud)

(我期望Promise.all能够映射Object文字的值,但保持密钥完整.)

但是Promise的MDN文档似乎表明Promise all适用于任何迭代.据我所知,对象文字{}是可迭代的.那我错过了什么?

Dmi*_*eev 3

如果您查看mdn 文档,则对象没有迭代器符号。

您可以做的是使用工具函数创建一个可迭代对象,然后使用它。

引用 objectEntries source,但是nodejs没有实现Reflect,因此为了与node一起使用它,我只需将其更改为使用Object.keys()

function objectEntries(obj) {
    let index = 0;

    // In ES6, you can use strings or symbols as property keys,
    // Reflect.ownKeys() retrieves both
    let propKeys = Object.keys(obj);

    return {
        [Symbol.iterator]() {
            return this;
        },
        next() {
            if (index < propKeys.length) {
                let key = propKeys[index];
                index++;
                return { value: [key, obj[key]] };
            } else {
                return { done: true };
            }
        }
    };
}
Run Code Online (Sandbox Code Playgroud)