如何从外部范围将变量传递给.then()回调函数
How to pass in a variable to a .then() callback function from an outer scope?
我有一个API接收请求并进行一些查询和验证。
我想在findUserPlayer
函数中使用路由中的response
引用,这样我就可以向客户端发送一些内容。findUser
函数将返回一个将在findUserPlayer
上使用的data
对象。
var api = express.Router();
api.post('/signup', function (request, response) {
UserModel.find(req.body)
.then(findUser, createUser)
.then(findUserPlayer, createUserPlayer);
});
var findUserPlayer = function (data, res) {
//...
res.json(object);
};
- 我试过调用
findUserPlayer(data, res)
,它给了我"数据未定义" - 我已尝试调用
findUserPlayer(res)
,它将覆盖data
如何在回调中使用response
对象?
您可以定义一个成功处理程序函数,然后调用findUserPlayer,而不是直接传递findUserPlayer函数作为成功处理程序。
var api = express.Router();
api.post('/signup', function (request, response) {
UserModel.find(req.body)
.then(findUser, createUser)
.then(function(data) {
return findUserPlayer(data, response);
}, createUserPlayer);
});
var findUserPlayer = function (data, res) {
//...
res.json(object);
};
JavaScript是一种非常灵活的语言,这意味着有很多方法可以处理这一问题,最简单的方法之一(就最小代码更改而言)是颠倒findUserPlayer
中参数的顺序并绑定上下文(.bind(response)
)。
但这将是一个糟糕的设计选择。一个"查找用户"的函数没有理由处理响应或json。它超出了这个职能范围和职责。请求处理程序应该处理格式化相关响应的问题,我会通过返回promise链中的相关数据来实现这一点,最终:
.then(function(data) {
response.json(data);
});
我是lodash的忠实粉丝,有时也会出错,但我想我会使用lodash中的partialRight函数添加以下内容。
var _ = require('lodash');
...
UserModel.find(req.body)
.then(findUser, createUser)
.then(_.partialRight(findUserPlayer, response), createUserPlayer);
CCD_ 12返回一个新函数。_.partialRight
的第一个参数是我们要将参数附加到的函数。随后的参数是我们想要附加到函数的参数。
我假设以下函数签名:findUserPlayer(data, response)
。CCD_ 15将响应对象附加到新函数中。新的函数签名现在看起来是这样的:function (data)
。
文档
相关文章:
- Javascript:If-then语句在函数中不起作用
- Promise函数在.then之后未运行函数化
- 如何在异步函数中正确使用Promise.all()和then()
- $resource上带有.then()函数的角度自定义方法导致错误
- 当链接javascript承诺时,如何处理then()函数中的条件
- 角承诺的“then”函数的成功回调的词汇范围是什么?
- Node.js中的Promise.all没有't调用then函数
- q 从 .then 函数分配给更高级别的作用域变量是否存在任何陷阱
- 当承诺在监视函数中解析时,如何使承诺的 then 函数起作用
- 如何使 then 函数工作
- 取消以下“then”函数中的$timeout是否有效
- Ember 是否有总是回调.js .then 函数
- Angularjs.then函数创建一个var以传递到外部.then
- 在d3节点上调用if…then函数
- Angular - controllers .then函数在指令之后被调用,所以没有数据可用
- 如果“then"函数从未被调用,是否存在“失败”?我可以定义的选项
- Ionic confirmPopup then()函数在用户交互之前被调用
- '.then'函数工作在量角器E2E测试的一个angularjs
- 在使用$.when().then()函数时遇到问题
- 如何将下面的代码清理成if then函数