Node.js 为什么我的承诺链同时运行,而不是按顺序运行
我是新的节点和承诺,所以任何帮助将不胜感激 我正试图:Node.js 为什么我的承诺链同时运行,而不是按顺序运行,node.js,concurrency,promise,async-await,Node.js,Concurrency,Promise,Async Await,我是新的节点和承诺,所以任何帮助将不胜感激 我正试图: 从API获取访问令牌 将访问令牌发送到URL的同一API 轮询URL以获取某些数据 我认为实现这一点的明智方法应该是一个承诺链(注意,我还没有实现轮询,我现在只是每隔一段时间执行一次console.log,而我正在进行此操作。此外,下面不包括请求主体,但这不是问题): 问题是,链条中的最后一个承诺在中间一个承诺完成之前就已经运行了。因此,控制台的输出为: got access token I'm here! got URL report U
got access token
I'm here!
got URL
report URL: undefined
如果在“获取URL”之前打印“我在这里”,那么在第二个承诺运行时,代码必须转到最后一个承诺。问题是它还没有URL。我不明白如何一个接一个地运行这些,而不是同时运行。我尝试将这三个承诺分成3个单独的函数,然后将它们包装到一个异步main()函数中,其中
async function main() {
let accessToken = await getAccessToken();
let url = await getURL(accessToken);
await pollReport(url);
}
但这也有同样的错误。有人知道如何解决这个问题吗?我在什么地方犯了一个基本的错误吗?任何帮助都将不胜感激 您的节
//使用访问令牌获取url
,最后一节不会返回承诺。这是当时的一次回调,它不会返回承诺。您需要将其包装在newpromise
中
我强烈建议您离开
请求
包,因为它现在已被取消。使用一些modenr day软件包,它内置了对承诺的支持,也会让你的生活更轻松。比如got
,axios
等等。问题是,你的代码不是很干净。始终检查是否有相同数量的左括号和右括号。这就解释了为什么你的“.then”同时起作用,因为你并没有把它们链接起来。你完全正确。我刚刚检查了原始代码,没有问题,只是将实际的请求json简化为“json_request”导致堆栈溢出时出现了一个错误,我把括号搞乱了。遗憾的是,这不是问题所在
async function main() {
let accessToken = await getAccessToken();
let url = await getURL(accessToken);
await pollReport(url);
}