node.js - Node.Js - .then 在重新生成 package-lock.json 后不再按预期工作
问题描述
我们设置了一个 NodeJS Lambda 函数来在内部 API 和 Slack 之间做一些工作。它一直运行良好,直到最近我们重新生成了package-lock.json
文件。
我遇到问题的代码如下。Lambda 日志以某种方式表明自从包锁重新生成以来,第一个.then
函数将返回user
对象保持为undefined
. 这会导致logRequest
失败。但是在retrieveUser
函数中,它能够从 API 中获取用户详细信息,因为我可以从这行代码中看到用户详细信息:
.json(response => console.log('Retrieve User Response ' + JSON.Stringify(response)))
appApi 用于wretch
从 API 中获取数据。会不会是跟烂版有关?它在该软件包 regen 中从 1.4.2 更新到 1.7.2。
代码:
var appApi = wretch().url(process.env.appApiHost).options(options);
var retrieveUser = function (message, AuthorizationToken) {
let endpoint = '/api/v1/users?format=json';
let aRequest = app.ViewRequesterMessage(message.user.name);
let form = app.createForm(aRequest, AuthorizationToken);
console.log('endpoint ' + endpoint);
return appApi
.url(endpoint)
.query(form)
.get()
.setTimeout(8000)
.onAbort(error => console.log('Timeout for ' + endpoint + ' ' + error))
.json(response => console.log('Retrieve User Response ' + JSON.stringify(response)))
.catch(error => console.log('retrieveUser Error: ' + error + ' for ' + endpoint));
};
lib.retrieveSecrets(process.env.secretsArn)
.then(function (secrets) {
respondToSlack(slack.formatSlackMessage('Work in progress ...'), slackResponseUrl)
.then(function () {
let result = retrieveUser(slackMessage, secrets.AuthorizationToken);
return result;
})
.then(function (user) {
let result = logRequest(slackMessage, user.users[0].id, user.users[0].login_name, secrets.AuthorizationToken);
return result;
})
.then(data => {
//do stuff
})
.catch(error => {
//do some other stuff
});
})
------------新更新------------
我现在可以确认这个问题肯定是由 Wretch 版本引起的。一旦我在package.json
文件中将 Wretch 版本设置回 1.4.2,代码就会再次开始工作。1.4.2 以上的任何版本都会破坏代码。鉴于下面的代码没有返回它应该返回的内容并且 appApi 是一个 Wretch 对象,我怀疑该部分中的某些行导致了问题。是因为我同时使用了 query() 和 get() 吗?
return appApi
.url(endpoint)
.query(form)
.get()
.setTimeout(8000)
.onAbort(error => console.log('Timeout for ' + endpoint + ' ' + error))
.json(response => console.log('Retrieve User Response ' + JSON.stringify(response)))
.catch(error => console.log('retrieveUser Error: ' + error + ' for ' + endpoint));
解决方案
推荐阅读
- angular6 - 在Angular 6中使用多个getElementById打印多个html2canvas
- nlp - 如何更改 Luis 应用程序的初始文化?
- asp.net - 在按钮单击时使用事件处理程序创建按钮,而不将其放在 Asp.net 中的 page_load 事件中
- python - 检查 Tkinter 按钮是否保持单击状态
- cts - 运行 cts-tradefed 时出错 [适用于 android 机顶盒]
- javascript - SVG 输入字段
- c++ - 具有独立主机环境的线程 (c++)
- sql - 在子查询中使用多个表
- angular - Angular 6中模块内的任何组件都可以调用Angular Bootstrap Modal
- c# - 实体框架核心。如何正确更新相关数据?