Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回未定义的函数似乎在返回结果之前正在运行console.log?需要承诺吗?_Javascript_Node.js_Express_Npm Request - Fatal编程技术网

Javascript 返回未定义的函数似乎在返回结果之前正在运行console.log?需要承诺吗?

Javascript 返回未定义的函数似乎在返回结果之前正在运行console.log?需要承诺吗?,javascript,node.js,express,npm-request,Javascript,Node.js,Express,Npm Request,我在另一个文件中有一个函数,我想获取该函数的响应,然后在退出控制器函数之前对该响应执行一些操作 以下是所需文件中的代码: exports.counter = function(companyID) { options.json.companyID = companyID request.post('/monitorCounter', options, (error, response, body) => { if (error) {

我在另一个文件中有一个函数,我想获取该函数的响应,然后在退出控制器函数之前对该响应执行一些操作

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

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')。计数器

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

let valid = monitorCounter(companyID)
console.log(`Valid: ${valid}`)
我希望它返回true(通过console.log测试,函数按预期工作),但我没有定义


我想我需要一个承诺,但不确定如何使用另一个文件,而且我还没有完全更新承诺(目前正在努力)

我设法找到了如何实现我需要的承诺,我以前尝试过,但没有“返回”促销,并且打错了“解决/拒绝”电话。下面是此问题的工作代码

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)
        });    
    });
}

我猜request.post是从图书馆来的?他们的医生说这是承诺还是可以观察到?这绝对是一件好事。因此,您可能需要有(promise)之类的有效文件。然后((val)=>{console.log(val)})@andrewf他用
npm request
标记了这个问题,这应该就是这个库。@andrewf是的,它是Node.js中使用的一个库。我在那个文档中没有看到任何关于JSON选项的内容,或者调用
request.post()
有3个参数。@Barmar就是这样是的,你可以按照我的方式调用请求,我已经用了一段时间了。在这一个应用程序中,我还有大约60个这样做的实例。请在30秒内查看我的新答案,以查看我提出的解决方案