首页 > 解决方案 > 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));

标签: node.js

解决方案


推荐阅读