用Strongloop环回实现Q
Implementing Q with Strongloop Loopback
Q是环回的"支持模块"。我不完全确定这意味着什么,但我假设这至少意味着可以将Q与环回的持久模型函数(如find()
或findOne()
)一起使用。我想知道如何正确设置如下内容:
app.models.Question.findOne({
where: {name: "My Question"}
}, function (err, result) {
throw err if err
}).then(function () {
console.log("success")
})
我已经使用NPM在我的项目目录中安装了Q,但据我所知,app.models.Question.findOne()
仍然返回未定义的,而不是可用的Q promise。
根据环回文档,使用Q,
如果函数不能返回值或引发异常阻止,它可以返回一个承诺。
在这种情况下,我需要做什么才能获得回送以返回承诺?
LoopBack查询此时不返回promise。请在LoopBack存储库中发布功能请求以提醒我们(阅读后https://github.com/strongloop/loopback/wiki/Issues当然)。然而,我相信ES6的承诺已经在路线图上了。
也就是说,你可以创建自己的承诺并返回:
var deferred = Q.defer();
app.models.Question.findOne({
where: {
name: 'My Question'
}
}, function(err, result) {
if (err) return deferred.reject(err);
deferred.resolve(result);
});
return deferred.promise;
注意我还没有测试过这个,但应该是类似的东西。看见https://github.com/kriskowal/q#using-推迟了解更多信息。
对promise的支持正在进入核心,请参阅:https://github.com/strongloop/loopback/issues/418
经过更多的实验,我最终实现了@superkhau方法的变体。(请原谅咖啡剧本)。
app.wrapper = (model, fn, args)->
deferred = Q.defer()
args.push((err, result)->
throw err if err
deferred.resolve(result)
)
app.models[model][fn].apply(app.models[model], args)
return deferred.promise
有了引导脚本中的该模块,您可以在任何现有环回模型的方法上调用包装器,如下所示:
app.wrapper("Question", "findOne", [{
where: {
name: {'My Question'}
}
}]).then((question)->
console.log("Success!")
console.log(question)
)
请注意,包装器有三个参数——模型名称、函数名称和一个参数数组。arguments数组应该是函数在正常调用时将采用的参数的数组。
我是流行的Q promise库的Q.ninvoke
方法的超级粉丝,它的方法签名类似于@Morslamina的解决方案,但不需要自己编写部分。这很好,如果你像我一样是一个懒惰的程序员。
loopback = require 'loopback'
q = require('q').ninvoke
app = module.exports = loopback()
app.get '/apples/:id', (res, req) ->
q(app.models.Apple, 'findById', req.params.id).done (apple) ->
res.render 'apple', apple: apple
在承诺正式登陆Loopback之前,这不是一种糟糕的生活方式。
- 如何使用动画实现纸张推车
- 客户端服务器REST API captcha实现
- 如何实现此布局
- Meteor忘记了密码的实现
- 使用Native Sockets在Android中实现WebSockets
- 在样板文件中实现Ajax
- instanceof是如何在JavaScript中实现的
- 如何正确实现Jquery多选小部件
- 实现一个建立在google.com之上的自定义搜索引擎
- 多个组件是如何实现的
- window.location使用jquery mobile实现chrome跳转
- 如何在OpenERP中实现网络摄像头
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- javascript加密实现,包括可信否认
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 如何让程序员在javascript中实现正确的回调
- 如何使用自定义辅助对象(handler)实现嵌套的每个循环
- AngularJS智能表全局配置实现
- Expressjs/AngularJS:实现req-flash后出错
- 用Strongloop环回实现Q