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