Javascript nodejs pg promise获取函数范围外的变量

Javascript nodejs pg promise获取函数范围外的变量,javascript,node.js,promise,pg,Javascript,Node.js,Promise,Pg,与承诺相关的工作相对较新。现在,我正在运行以下命令,以便从数据库中查询一些数据。我知道该函数是异步的,因此“then”中的所有内容都会在查询完成后的某个时间执行,并将结果传递给该函数。我不明白的是如何访问作用于外部函数的变量,以便我可以使用它们 var db = require('../repositories/db.js'); var Response = require('../models/responseModel.js'); var dashboard = {}; dashboar

与承诺相关的工作相对较新。现在,我正在运行以下命令,以便从数据库中查询一些数据。我知道该函数是异步的,因此“then”中的所有内容都会在查询完成后的某个时间执行,并将结果传递给该函数。我不明白的是如何访问作用于外部函数的变量,以便我可以使用它们

var db = require('../repositories/db.js');
var Response = require('../models/responseModel.js');

var dashboard = {};

dashboard.getCompany = function (req, res) {
    var companyId = req.params.companyId.toUpperCase();
    var sql = db.getSql('./sql/getCompany.sql');

    db.any(sql, { tic: companyId })
        .then(function (data) {
            var r = new Response(true, 'retrieved company', data);

            // can't do this because companyId is undefined...            
            // console.log(companyId);

            res.status(200)
                .json(r);
        })
        .catch(function (err) {
            var r = new Response(false, err.message);
            res.send(r);
        });
};
我一直在阅读pg promise和bluebird(这就是我初始化promise库时使用的…),但我不太了解它:(我只需要能够访问查询外部的变量,或者通过某种方式将它们传递到.then()中)在上面的示例中,我如何访问req.params中传递的但在查询内部的某个ID

任何帮助都将不胜感激。

使用

这里是3个函数的示例,a、b和c。c需要a和b的返回值,但b不需要知道a返回什么(这是人为的)

这将返回:

hellogoodbay

您交给Promise的对象。bind()可以是您喜欢的任何对象。因此,您可以将外部变量放在对象上,这些变量可以通过
this
访问。bind将交给它的对象分配给
this
,用于链接到Promise之外的所有函数。

使用

这里是3个函数的示例,a、b和c。c需要a和b的返回值,但b不需要知道a返回什么(这是人为的)

这将返回:

hellogoodbay


你交给Promise.bind()的对象可以是您喜欢的任何对象。因此,您可以将外部变量放在对象上,并且可以通过
this
访问这些变量。Bind将对象交给它,并将其分配给
this
,用于所有与承诺相关联的函数。

companyId应该在整个getCompany函数中定义。您可能还有另一个问题。因此你是说我“应该”事实上,我可以访问它吗?当然。它与承诺无关。尝试记录req.params并查看其中的内容。看起来我可以从req.params直接访问公司id。我想我就这样访问值。companyId应该在整个getCompany函数中定义。你可能还有另一个问题。你是说我“应该”实际上能够访问它?当然。它与承诺无关。尝试记录req.params并查看其中的内容。看起来我可以从req.params直接访问公司id。我想我只需要通过这种方式访问该值。谢谢!这将适用于我需要它做的事情。谢谢!这将适用于我需要它做的事情。
var Promise = require('bluebird');

function a (){
    this.p1 = 'hello';
}
function b (){
    this.p2 = 'goodbye';
}

function c (){
    return this.p1 + this.p2;
}

Promise.bind({})
    .then(a)
    .then(b)
    .then(c)
    .then((res)=> console.log(res))
    .catch(err => console.log(err));