Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅返回承诺挂起的节点获取_Javascript_Node.js_Promise - Fatal编程技术网

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));