Node.js错误:(节点:9748)UnhandledPromiseRejectionWarning:未处理的承诺拒绝

时间:2018-01-12 11:27:41

标签: json node.js nightmare

我正在尝试从Node.js中的“噩梦”中获取一个json,然后使用JSON.parse(),但是我收到以下错误:

  

(node:9748)UnhandledPromiseRejectionWarning:未处理的promise promise(拒绝ID:1):SyntaxError:位于18509的JSON中的意外的令牌<

我的代码:

var nightmare = Nightmare()
        .goto('URL') 
        .wait(10000) // Need wait some time
        .evaluate(() => {
            return document.body.innerText;
        })
        .end()
        .then((body) => {
            var data;
            try {
                data = JSON.parse(body);
            } catch(e) {
                console.log(e);
            }
            callback(null, data);
        });

1 个答案:

答案 0 :(得分:0)

您可以在使用JSON.parse函数时检查JSON是否有效。

function validJSON(str) {
  try {
    // try to parse the JSON
    JSON.parse(str);
  } catch (e) {
    // if not a json
    return false;
  }
  // if it's valid json
  return true;
}

它将检查字符串是否有效json。现在,您可以将它与梦魇一起使用。

const nightmare = Nightmare()
  .goto("URL")
  .wait(10000) // Need wait some time
  .evaluate(() => {
    return document.body.innerText;
  })
  .end()
  .then(body => {
    // if it's a valid json, send it, 
    // otherwise send it as a body object
    const data = validJSON(body) ? body : { body };
    callback(null, data);
  });

现在,错误显示是因为您说 catch(e) console.log(e)错误。因此,它只是服从你的命令。

由于表情符号本身不是有效的json,你必须从中创建一个json,或者如果它是json 字符串则解析它。

有效的json对象可能如下所示,

{emoji:  "☻"}

你看到它是如何被引用的?