首页 > 解决方案 > nodejs函数的返回值

问题描述

请帮帮我,我有一个脚本

export    function GetKey(inn, res) {
    try {
        const body = {
            7709798583: {
                name: 'someName',
                key: '123'
            },
            7718266352: {
                name: 'otherName',
                key: '123'
            }
        };
    res(body[inn]['key']);

    } catch (err) {

       res('0000000000000');
    }
};

在其他文件中,我尝试使用此功能

GetKey(param, (name) => {
            console.log(name);
        });

没关系。但我需要将回调返回给参数。如何?

 var param =  GetKey(param, (name) => {
            return name;
        });

不正确并返回未定义

标签: node.js

解决方案


回调不是这样工作的。Promise不过,您可以使用和 async-await 语法来伪造该行为。

如果您想编写您的代码,您需要将其余逻辑放在一个函数中并将其直接传递给您的回调:

var param = ''

var allYourLogic = name => {
    // YOUR LOGIC
    param = name
}

GetKey(param, allYourLogic);

或者您可以简单地内联您的逻辑:

GetKey(param, (name) => {
    param = name
    // YOUR LOGIC
});

使用Promise语法,它看起来是这样的:

new Promise(resolve => {
    GetKey(param, resolve)
})
.then(name => {
    param = name
    // YOUR LOGIC
})

最后,使用 async-await 方法:

var param = (
    await new Promise(resolve => {
        GetKey(param, resolve)
    })
)

确实,您似乎在做一些奇怪的事情,这就是您首先遇到此问题的原因。

只要您使用回调,您的整个应用程序就会像异步一样运行,因为回调不会在 Node.js 的事件循环中立即执行。相反,您所在的当前函数将在GetKey函数调用回调方法之前完成执行。


推荐阅读