nodejs pg-promise 在函数范围之外获取变量
nodejs pg-promise get variable outside function scope
使用 promises 相对较新。现在,我 运行 以下是为了从数据库中查询一些数据。我知道该函数是异步的,因此 "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?
如有任何帮助,我们将不胜感激。
一个很好的选择是使用 Promise.bind();
这里有 3 个函数 a、b 和 c 的示例。 C 需要 A 和 B 的 return 值,但是 b 不需要知道 a returns 是什么(这是人为的)。
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));
这个returns:
hellogoodbye
你交给Promise.bind()的对象可以是任何你喜欢的对象。因此,您可以将外部变量放在对象上,并且可以通过 this
访问它们。 Bind 获取传递给它的对象并将其分配给 this
以用于所有与 promise 链接的函数。
使用 promises 相对较新。现在,我 运行 以下是为了从数据库中查询一些数据。我知道该函数是异步的,因此 "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?
如有任何帮助,我们将不胜感激。
一个很好的选择是使用 Promise.bind();
这里有 3 个函数 a、b 和 c 的示例。 C 需要 A 和 B 的 return 值,但是 b 不需要知道 a returns 是什么(这是人为的)。
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));
这个returns:
hellogoodbye
你交给Promise.bind()的对象可以是任何你喜欢的对象。因此,您可以将外部变量放在对象上,并且可以通过 this
访问它们。 Bind 获取传递给它的对象并将其分配给 this
以用于所有与 promise 链接的函数。