【问题标题】:Why does this program exit before invoking my "then" clause?为什么这个程序在调用我的“then”子句之前就退出了?
【发布时间】:2020-08-03 13:07:31
【问题描述】:

当我发送这个简单的 API 请求-承诺调用时,我没有得到任何响应。有人可以告诉我为什么这不起作用吗?

var request = require('request-promise');
var options = {
    uri: 'https://jsonplaceholder.typicode.com/todos/1',
    headers: {
        'User-Agent': 'Request-Promise'
    },
    json: true
};

request(options)
.then(function (success) {
    console.log(success);
})
.catch(function (error) {
    console.log('noob!');
})

它转到“请求(选项)”行,跳过成功和失败,然后退出程序。什么给了?!

【问题讨论】:

  • 您好!虽然我可以理解这可能令人沮丧,但请理解许多人在工作中查看此站点并且会欣赏不那么丰富多彩的语言。我已经编辑掉了额外的内容,所以这个问题将来可能对其他读者和回答者更有用。
  • 你用什么来运行这个?节点JS?那么,哪个版本?

标签: typescript request-promise


【解决方案1】:

the answer to your previous question 一样,您使用的是 Promise,它保证会跳过请求和响应。通过传入这两个functions,您提供了执行环境(可能是Node)回调,一旦成功完成请求,它就可以调用这些回调。因为您正在访问远程服务器,这将需要一些时间,通常在几十或几百毫秒内。

如果您不以其他方式指示 Node,它将在到达脚本末尾时终止。库可能无法及时调用您的回调。与this NodeJS issue 一样,您可以使用顶级await 函数,它会暂停程序的执行以等待回调。

try {
  let success = await request(options);
  console.log(success);
} catch (error) {
  console.log('noob!');
}

另见:Node exits without error and doesn't await promise (Event callback)

【讨论】:

  • 我不在乎有多少人反对这篇文章(我不是雪花)我真的对这篇文章有意见,老实说,你写它的方式为我清除了很多东西。只需将其作为异步函数调用并允许函数从服务器获取时间(在它关闭之前)就可以使一切正常。非常感谢你,我将在应得的地方给予赞扬。我给你打勾。非常感谢你教我一堂关于 Node 承诺的课程,我希望你有一个美好的一天!你让我免于被解雇。
猜你喜欢
  • 2012-08-27
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
相关资源
最近更新 更多