首页 > 解决方案 > 返回未定义的函数似乎在返回结果之前正在运行 console.log?需要承诺吗?

问题描述

我在另一个文件中有一个函数,我想得到它的响应,然后在退出我的控制器函数之前对该响应做一些事情。

以下是所需文件中的代码:

exports.counter = function(companyID) {
    options.json.companyID = companyID
    request.post('/monitorCounter', options, (error, response, body) => {
        if (error) {
            console.log(error);
            throw error;
        }
        if(body.success == true) return true
    });    
}

这是我需要文件/功能的方式

const monitorCounter = require('../controllers/counter').counter

然后这就是我试图在我的主控制器文件中测试/使用它的方式

let valid = monitorCounter(companyID)
console.log(`Valid: ${valid}`)

我期待它返回 true (通过 console.log 测试并且功能按预期工作),但我得到了未定义。

我在想我需要一个承诺,但不确定如何将它作为一个不同的文件来做到这一点,而且我还没有完全更新承诺(目前正在处理)

标签: javascriptnode.jsexpressnpm-request

解决方案


我设法弄清楚如何实现我需要的承诺,我之前尝试过但没有“返回”承诺并且调用解决/拒绝错误。以下是此问题的工作代码。

exports.counter = function(companyID) {
    return new Promise((resolve, reject) => {
        options.json.companyID = companyID
        request.post('/monitorCounter', options, (error, response, body) => {
            if (error) {
                console.log(error);
                throw error;
            }
            if(body.success == true) resolve(true)
            if(body.success != true) reject(false)
        });    
    });
}

推荐阅读