UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“ forEach”

时间:2020-03-04 17:30:08

标签: javascript foreach

我的代码:


export const convertToTickerObject = (data) => {
  const keys = [
    'id',
    'last',
    'lowestAsk',
    'highestBid',
    'percentChange',
    'baseVolume',
    'quoteVolume',
    'isFrozen',
    'high24hr',
    'low24hr'
  ];

  const object = {};
  data.forEach((value, i) => {
    if (i === 0) {
      object.name = getCurrencyPairId(value);
      return; //escape arrow function
    }
    const key = keys[i];
    object[key] = value;
  });

  return object;
};

错误:

UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“ forEach” UnhandledPromiseRejectionWarning:未处理的承诺拒绝。该错误是由于在没有catch块的情况下抛出异步函数而引起的,或者是由于拒绝了未经.catch()处理的诺言而引起的。 (拒绝ID:1) (节点:7188)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。

我尝试使用async / await,但是此警告不断发生。

如何解决此警告? :(

1 个答案:

答案 0 :(得分:0)

正如错误所言,您传递的参数可能未定义或不是对象。试试这个:

const convertToTickerObject = (data) => {
  if ( typeof data !== 'object' ){
    return 'Not object. Parameter type: '+ typeof data;
  }
  if( Object.keys(data).length === 0 && data.constructor === Object ){
    return 'object empty';
  }
  const keys = [
    'id',
    'last',
    'lowestAsk',
    'highestBid',
    'percentChange',
    'baseVolume',
    'quoteVolume',
    'isFrozen',
    'high24hr',
    'low24hr'
  ];

  const object = {};
  data.forEach((value, i) => {
    if (i === 0) {
      object.name = getCurrencyPairId(value);
      return; //escape arrow function
    }
    const key = keys[i];
    object[key] = value;
  });

  return object;
};

这可能揭示其他地方的错误。像我这样添加的支票一样好。