我开始对node.js进行更深入的研究,并在白蚁中四处游玩。我正在使用GET节点包https://www.npmjs.com/package/got发出一个https://www.npmjs.com/package/got请求。
下面是我在浏览器中使用jquery和终端中使用got的代码。
jQuery码
$.get('https://raw.githubusercontent.com/notwaldorf/emoji-translate/master/bower_components/emojilib/emojis.json', function (data) {
var showEmoji = JSON.parse(data)
console.log(showEmoji.grinning.char);
})如我所料,这件事显示在妓院的控制台上--一切都很好。
然后,当我在节点环境中编写等效代码时,不会显示任何内容。
Node.js代码
var got = require("got");
var url = 'https://raw.githubusercontent.com/notwaldorf/emoji-translate/master/bower_components/emojilib/emojis.json'
got(url).then(function(data){
var showEmoji = JSON.parse(data)
console.log(showEmoji.grinning.char);
});据我所知,节点确实识别这些表情符号--见截图。

有人能解释一下为什么结果不一样吗?我是不是错过了一些简单而明显的东西?
问题似乎与表情符号无关,就好像我试图将回调函数中的代码更改到下面一样,节点中仍然没有显示任何内容,但是浏览器控制台中显示了一个数组。
console.log(showEmoji.grinning.keywords);发布于 2016-03-31 08:00:29
问题是data不是字符串,而是描述HTTP请求的富对象。此代码适用于:
var got = require("got");
var url = 'https://raw.githubusercontent.com/notwaldorf/emoji-translate/master/bower_components/emojilib/emojis.json'
got(url).then(function(data){
var showEmoji = JSON.parse(data.body);
console.log(showEmoji.grinning.char);
});...but --您确实应该在您的承诺中添加.catch( ... )调用,以便在发生这种事情时提醒您。(也有一个常见的回调.done(),但got的承诺似乎不支持它。)
它不起作用的原因是JSON.parse函数失败了--但Node没有告诉您这一点,原因是.then()回调中的异常没有显示给用户。它们被存储并传递到.catch()回调中,或者在调用.done()时抛出。通常,您不应该在没有.then()存在的情况下使用.catch(),否则这种事情就会不断发生。
如果不需要所有这些显式处理,那将是很好的,但这是不可能的承诺库。也许本土的承诺将允许它在未来。
https://stackoverflow.com/questions/36327180
复制相似问题