console.log(err.message); & console.log(错误[0].消息);

console.log(err.message); & console.log(err[0].message);

使用 Twitter API 时,如果一切正常,则使用 err[0].message 将 return You have already ___ed this tweet.,但是如果出现 HTTP 状态代码,则表示由于速率限制,然后输出将变为 TypeError: Cannot read property 'message' of undefined 这可能导致脚本在失败时停止。

这可以通过将 err[0].message 更改为 err.message 来解决,但是,如果一切顺利,它将 return 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.

那么处理这个问题的最佳方法是什么,以确保两者都能正确记录,而不会导致错误或输出不清楚?

如果没有错误,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);
    }
  }

});