Javascript中promise和@iterator存在问题

Javascript中promise和@iterator存在问题,javascript,node.js,debugging,promise,Javascript,Node.js,Debugging,Promise,我对Promise对象是新手。当我在NodeJS中运行下面的代码时 function solution(num){ return getData(num).then(getMax); } function getData(num){ return Promise.resolve({ first: 80 * num, second: 30 * num }); } function getMax(numbers){ return

我对
Promise
对象是新手。当我在
NodeJS中运行下面的代码时

function solution(num){
    return getData(num).then(getMax); 
}

function getData(num){
    return Promise.resolve({
        first: 80 * num,
        second: 30 * num
    });
}

function getMax(numbers){
    return Promise.resolve(Math.max(...numbers));
}

solution(10)
我面对错误

(节点:7814)未处理的PromisejectionWarning:TypeError:Found 不可调用的@迭代器 在getMax

你能帮我修一下吗?
谢谢

您正在做的
…numbers
期望
numbers
是可编辑的,但在您的情况下,它是对象

试着把它做成一个数组(或任何可编辑的),它应该可以工作

函数解决方案(num){
返回getData(num),然后返回getMax;
}
函数getData(num){
返回承诺。解决([80*num,30*num]);
}
函数getMax(数字){
返回Promise.resolve(Math.max(…数字));
}
解决方案(10)。然后(console.log)

如果您想修复原始代码,请阅读本节。您可以使用生成器函数修复迭代器错误。JavaScript对象与数组、集合和映射不同,它们没有
符号.iterator
属性。许多内置函数,包括
Math.max
将基于
Symbol.iterator
属性识别迭代器。可以使用对象值生成器将对象转换为迭代器

函数解决方案(num){
返回getData(num)。然后返回getObjectValuesIterator。然后返回getMax;
}
函数getObjectValuesIterator(obj){
返回(函数*(){
用于(obj中的常量键){
屈服对象[键]
}
})()
}
函数getData(num){
还愿({
第一:80*num,
秒:30*num
});
}
函数getMax(数字){
返回Promise.resolve(Math.max(…数字));
}
解决方案(10)。然后(console.log)/=>800

getObjectValuesIterator
基于生成器函数返回迭代器
Math.max
识别迭代器并且不会出错。

您看到的问题是:

return getData(num).then(getMax); 
在这种情况下,来自
getData
的成功回调将返回一个对象,您将该对象传递到
getMax

正确的方法是:

return getData(num).then((result) => getMax(Object.values(result)); 

添加
solution(10).catch(console.log)
,您将看到您不应该在这里使用承诺的问题。您所做的一切都是同步的。或者在不更改
getData
的情况下,您可以执行
…Object.values(number)
您可以在不更改getData和getMax的情况下修复它吗?