gpt4 book ai didi

javascript - 构造封装 Node.js 请求的函数

转载 作者:行者123 更新时间:2023-12-03 11:07:53 25 4
gpt4 key购买 nike

我正在函数内调用 API。此时我得到“未定义”作为返回值。我知道对 API 的调用是成功的,因为我尝试在调用中获取的 URL 打印到该术语没有问题。我 99% 确定在请求函数完成之前会触发对封装函数的调用(在列出 URL 之前返回“未定义”)。我想确认这一点,并询问是否有人可以向我指出教程或代码片段,并详细描述我在这种情况下应该遵循的模式。 <-- 显然仍在与野兽的异步本质作斗争:)

  function GetPhotoURLs(url){

var photo_urls= new Array();

request({
url: url,
json: true
}, function (error, response, body) {


if (!error && response.statusCode === 200)
{
//console.log(body) // Print the json response
var inhale_jsonp=body;

var blog_stream= inhale_jsonp.substring(22,inhale_jsonp.length-2); //getting JSON out of the wrapper
blog_stream=JSON.parse(blog_stream);

for(var i=0;i<blog_stream.posts.length;i++)
{
photo_urls[i]=blog_stream['posts'][i]['photo-url-500'];
console.log(photo_urls[i]+"\n"); //checking that I am getting all the URLs

}

console.log("success!");
console.log(photo_urls[1]);
return photo_urls;
}
else
{
photo_urls[0]='none';
console.log("nope!");
console.log(photo_urls[0]);
return photo_urls;
}

});

}

输出序列-->1. 未定义2. URL 列表3. 成功消息 + URL 数组中的第二个元素

最佳答案

request() 函数是异步的。因此,它会在原始函数完成很久之后才完成。因此,您无法从中返回结果(当函数返回时甚至还不知道结果)。相反,您必须在回调中处理结果或从该回调中调用函数并将结果传递给该函数。

对于此类工作的一般设计模式,您可以按照上面的建议在回调中处理结果,也可以切换到使用 Promise 来帮助您管理请求的异步性质。在所有情况下,您都将在某种回调中处理结果。

您可以阅读this answer有关处理异步响应的更多详细信息。该特定答案是为客户端 ajax 调用编写的,但处理异步响应的概念是相同的。

<小时/>

在您的具体情况下,您可能希望让 getPhotoURLs() 接受一个回调函数,您可以使用结果调用该函数:

function GetPhotoURLs(url, callback){

.....

request(..., function(error, response, body) {

...

// when you have all the results
callback(photo_urls);
})

}

GetPhotoURLs(baseurl, function(urls) {
// process urls here

// other code goes here after processing the urls
});

关于javascript - 构造封装 Node.js 请求的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27757307/

25 4 0
文章推荐: javascript - dust js动态@eq条件
文章推荐: javascript - JSON.NET 属性作为 Javascript 函数
文章推荐: javascript -