Javascript 我保证,所有这些都是无稽之谈

Javascript 我保证,所有这些都是无稽之谈,javascript,promise,Javascript,Promise,我想使用Promise.all异步运行一些请求,但我将得到一个键很重要的对象。我已经将数组传递给了Promise.all,但是我可以传递一个每个属性的值都是Promise的对象吗?我是否能够通过键访问随后回调中的结果? 我查看了,他们说传入iterable,但只显示传入数组的示例 这是我刚刚做的一件事 Promise.allObject = function(obj) { var keys = Object.keys(obj); var promises = keys.map(f

我想使用
Promise.all
异步运行一些请求,但我将得到一个键很重要的对象。我已经将数组传递给了
Promise.all
,但是我可以传递一个每个属性的值都是Promise的对象吗?我是否能够通过键访问随后回调中的结果?
我查看了,他们说传入iterable,但只显示传入数组的示例

这是我刚刚做的一件事

Promise.allObject = function(obj) {
    var keys = Object.keys(obj);
    var promises = keys.map(function(key) { return obj[key]; });
    return Promise.all(promises).then(function(data) {
        return data.reduce(function(result, val, indx) {
            result[keys[indx]] = val;
            return result;
        }, {});
    });
};
这是一个测试,对我来说很有效

var dummy = function(v) {
    return new Promise(function(resolve) {
        setTimeout(resolve.bind(null, v), (Math.random() * 2000 + 2000) >>> 0);
    });
};

Promise.allObject({
    key1: dummy('a'),
    key2: dummy('c'),
    key3: dummy('b'),
    key4: 'not a promise'
})
.then(console.log.bind(console))
.catch(console.error.bind(console));
大约4秒钟后(虚拟函数有一个随机超时),它将输出

对象{key1:“a”,key2:“c”,key3:“b”,key4:“非承诺”}


有用吗?

这是我刚准备好的东西

Promise.allObject = function(obj) {
    var keys = Object.keys(obj);
    var promises = keys.map(function(key) { return obj[key]; });
    return Promise.all(promises).then(function(data) {
        return data.reduce(function(result, val, indx) {
            result[keys[indx]] = val;
            return result;
        }, {});
    });
};
这是一个测试,对我来说很有效

var dummy = function(v) {
    return new Promise(function(resolve) {
        setTimeout(resolve.bind(null, v), (Math.random() * 2000 + 2000) >>> 0);
    });
};

Promise.allObject({
    key1: dummy('a'),
    key2: dummy('c'),
    key3: dummy('b'),
    key4: 'not a promise'
})
.then(console.log.bind(console))
.catch(console.error.bind(console));
大约4秒钟后(虚拟函数有一个随机超时),它将输出

对象{key1:“a”,key2:“c”,key3:“b”,key4:“非承诺”}


有用吗?

单击链接到的网页上的
Iterable
文档链接。它说:一些内置类型,如数组或映射,有默认的迭代行为,而其他类型(如对象)没有。不过,没有什么可以阻止您将Iterable协议添加到您定义的对象中。它只是默认情况下没有实现。您也可以使用
地图
而不是
对象
。单击链接到的网页上的
Iterable
文档的链接。它说:一些内置类型,如数组或映射,有默认的迭代行为,而其他类型(如对象)没有。不过,没有什么可以阻止您将Iterable协议添加到您定义的对象中。它只是默认情况下没有实现。您也可以使用
映射
而不是
对象
。您认为它处理拒绝的方式有什么问题吗?本机
承诺。所有
也都有-这就是我的目标,模仿Promise.all Behavior with a Object你认为它处理拒绝的方式有什么问题吗?原生
Promise.all
也有-这就是我的目标,模仿Promise.all Behavior with a Object