console.log (err.message); & console.log (err [0] .message); - PullRequest
0 голосов
/ 29 апреля 2018

При использовании API Twitter, если все в порядке, то с помощью err[0].message будет возвращено You have already ___ed this tweet., однако, если код состояния HTTP поступит, скажем, из-за ограничения скорости, то вывод станет TypeError: Cannot read property 'message' of undefined, что может вызвать скрипт останавливается при ошибке.

Эту проблему можно решить, изменив err[0].message на err.message, однако, если все хорошо, он вернет undefined вместо You have already ____ed this tweet..

Фрагмент при использовании err.message:

T.post('statuses/retweet', id, function(err, response){
    // log failures
    if(err){
      console.log(err.message);

Вывод, когда скорость ограничена:

HTTP Error: 429 Too Many Requests

Выход без ограничения скорости:

undefined

Фрагмент при использовании err[0].message:

T.post('statuses/retweet', id, function(err, response){
    // log failures
    if(err){
      console.log(err.message);

Выход при ограничении скорости:

TypeError: Cannot read property 'message' of undefined

Выход без ограничения скорости:

You have already retweeted this tweet.

Так каков наилучший способ справиться с этим, чтобы оба они могли правильно регистрироваться, не вызывая ошибки или неясно при выводе?

1 Ответ

0 голосов
/ 29 апреля 2018

Если ошибок нет, err будет undefined

Если происходит ограничение скорости, err будет HTTP Error: 429 Too Many Requests

Если произойдет какая-либо другая ошибка, err будет массивом.

Вы можете проверить тип err для обработки всех сценариев.

'use strict';

let _ = require('lodash');

T.post('statuses/retweet', id, function (err, response) {

  if (err) {
    if (_.isArray(err)) {
      // handles You have already ___ed this tweet.
      console.log(err[0].message);
    } else {
      // this takes care of HTTP Error: 429 Too Many Requests
      console.log(err.message);
    }
  }

});
...