gpt4 book ai didi

Node.js 函数返回未定义

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:42 24 4
gpt4 key购买 nike

我可能对 Node.js 的异步性有一些问题。

rest.js

var Shred = require("shred");
var shred = new Shred();


module.exports = {
Request: function (ressource,datacont) {
var req = shred.get({
url: 'ip'+ressource,
headers: {
Accept: 'application/json',

},

on: {
// You can use response codes as events
200: function(response) {
// Shred will automatically JSON-decode response bodies that have a
// JSON Content-Type
if (datacont === undefined){
return response.content.data;
//console.log(response.content.data);
}
else return response.content.data[datacont];
},
// Any other response means something's wrong
response: function(response) {
return "Oh no!";
}
}
});
}
}

其他.js

var rest = require('./rest.js');

console.log(rest.Request('/system'));

问题是,如果我从 other.js 调用请求,我总是得到“未定义”。如果我在rest.js 中取消注释console.log,则http 请求的正确响应将写入控制台。我认为问题在于该值是在请求的实际响应出现之前返回的。有谁知道如何解决这个问题吗?

最好,dom

最佳答案

首先,精简现有代码很有用。

Request: function (ressource, datacont) {
var req = shred.get({
// ...
on: {
// ...
}
});
}

您的 Request 函数根本不会返回任何内容,因此当您调用它并 console.log 结果时,它始终会打印 undefined 。各种状态代码的请求处理程序调用 return,但这些返回位于各个处理程序函数内部,而不是 Request 内部。

不过,您对 Node 异步特性的看法是正确的。您不可能返回请求的结果,因为当您的函数返回时请求仍在进行中。基本上,当您运行 Request 时,您正在启动请求,但它可以在将来的任何时间完成。 JavaScript 中处理此问题的方式是使用回调函数。

Request: function (ressource, datacont, callback) {
var req = shred.get({
// ...
on: {
200: function(response){
callback(null, response);
},
response: function(response){
callback(response, null);
}
}
});
}

// Called like this:
var rest = require('./rest.js');
rest.Request('/system', undefined, function(err, data){
console.log(err, data);
})

您将第三个参数传递给Request,这是一个在请求完成时调用的函数。可能失败的回调的标准 Node 格式是 function(err, data){,因此在这种情况下,成功时您会传递 null,因为没有错误,并且您会传递response 作为数据。如果有任何状态代码,那么您可以将其视为错误或任何您想要的。

关于Node.js 函数返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14895707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com