gpt4 book ai didi

javascript - 如何构建对 API 的异步调用?

转载 作者:行者123 更新时间:2023-12-02 23:18:29 26 4
gpt4 key购买 nike

我正在尝试编写一些代码来调用 API,然后 API 将返回一些 URL,然后我需要从每个 URL 进行新的调用。为了避免到处嵌套回调负载,我尝试使用 async/await,但由于某种原因它似乎不起作用,尽管我尝试了极其简单的设置。

我尝试创建两个异步函数,其中一个调用任何 url 并返回响应,另一个函数将根据响应多次调用第一个函数(即返回多少个 url) )。

const request = require('request');
init();

async function init() {
const username = "x";
const archiveUrl = "https://someurl.com";
const archiveResponse = await apiCall(archiveUrl)
const archives = archiveResponse.archives;
console.log(archives);
}

async function apiCall(url) {
request(url, { json: true }, (err, res, body) => {
if (err) { return console.log(err); }
console.log(body);
return body;
});
}

这实际上是我目前的全部代码,我不确定哪里出了问题。我收到的错误是它无法从 undefined 读取 .archives,在该错误消息之后,它会从 apiCall 函数记录正文(让我相当确定该函数没有按预期等待)。

也就是说,我看不出我做错了什么。任何有关一般最佳实践的提示将不胜感激,我以前使用过 async/await 但它总是很老套且自学,所以我确信有更好的方法来做到这一点。

最佳答案

apiCall函数中,您使用callback而不是Promise,您需要promisify该函数,以便const archiveResponse = wait apiCall(archiveUrl) 实际上有效:

function apiCall(url) {
return new Promise((res, rej) => {
request(url, { json: true }, (err, res, body) => {
if (err) { return rej(err)}
console.log(body);
return res(body);
});
})
}

如果您使用async-await,请通过将其包含在try..catch中来处理错误

注意:或者您可以使用request-promisaxios它们支持开箱即用的promise。

关于javascript - 如何构建对 API 的异步调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57052990/

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