Javascript 仅返回承诺挂起的节点获取
我正在尝试Javascript 仅返回承诺挂起的节点获取,javascript,node.js,promise,Javascript,Node.js,Promise,我正在尝试节点获取,我得到的唯一结果是: Promise{} 如何解决此问题以获得完整的承诺 代码: 承诺是一种跟踪将来某个时间将分配的值的机制 在分配该值之前,承诺是“待定”的。这通常是从fetch()操作返回它的方式。此时,它通常应处于挂起状态(可能有一些情况下,由于某些错误,它会立即被拒绝,但通常承诺最初是挂起的。在将来的某个时候,它会被解决或拒绝。要在解决或拒绝时得到通知,请使用。然后()处理程序或.catch()处理程序 var nf = require('node-fetch');
节点获取
,我得到的唯一结果是:
Promise{}
如何解决此问题以获得完整的承诺
代码:
承诺是一种跟踪将来某个时间将分配的值的机制 在分配该值之前,承诺是“待定”的。这通常是从
fetch()
操作返回它的方式。此时,它通常应处于挂起状态(可能有一些情况下,由于某些错误,它会立即被拒绝,但通常承诺最初是挂起的。在将来的某个时候,它会被解决或拒绝。要在解决或拒绝时得到通知,请使用。然后()
处理程序或.catch()
处理程序
var nf = require('node-fetch');
var p = nf(url);
console.log(p); // p will usually be pending here
p.then(function(u){
console.log(p); // p will be resolved when/if you get here
}).catch(function() {
console.log(p); // p will be rejected when/if you get here
});
如果是
.json()
方法让您感到困惑(考虑到您的问题措辞不清楚,不知道),那么u.json()
返回一个承诺,您必须使用该承诺的.then()
来获取该承诺的值,您可以通过以下任一方式来实现:
var nf = require('node-fetch');
nf(url).then(function(u){
return u.json().then(function(val) {
console.log(val);
});
}).catch(function(err) {
// handle error here
});
或者,在嵌套较少的情况下:
nf(url).then(function(u){
return u.json()
}).then(function(val) {
console.log(val);
}).catch(function(err) {
// handle error here
});
上有一个精确的代码示例。不确定为什么不从该示例开始。代码的问题是u.json()返回一个承诺 您还需要等待新承诺的解决:
var nf = require('node-fetch');
var url = 'https://api.github.com/emojis'
nf(url).then(
function(u){ return u.json();}
).then(
function(json){
console.log(json);
}
)
对于真正的代码,您还应该添加一个.catch或try/catch以及一些404/500错误处理,因为除非发生网络错误,否则获取总是成功的。状态代码404和500仍然会成功解析。u.json()
返回一个承诺,所以您需要这样做
nf(url)
.then(function(u){
return u.json();
})
.then(function(j) {
console.log(j);
});
或者当您使用node时
nf(url).then(u => u.json()).then(j => console.log(j));
u.json()
返回promise@jfriend00我不知道.json()
FYI,我认为在node.js中发出http请求的功能会更强大。@jfriend00谢谢你的建议。我只去了node fetch
,因为我的一个朋友建议了它,因为它现在在所有浏览器中都是主线,但通常没有理由选择浏览器技术在node中使用。我更喜欢选择一些设计来充分利用node中的所有功能,包括流和http请求中可以包含的大量内容。我建议您查看请求模块。
nf(url).then(u => u.json()).then(j => console.log(j));