函数适用于Promises
我正在使用蓝鸟在Node.js中开发一个基于承诺的项目,而另一个项目则是由ES6提供的本地承诺。 在这两个中,我有一个链,我在以下forms查询数据库:
some_function(/*...*/) .then(function () { return query("SELECT `whatever` FROM `wherever` ") }) .then(/*...*/)
请注意, query
显然返回parsing为查询结果的承诺。 这在几个链中重复,我正在寻找一种方法来清理未使用的函数包装。
我自然使用Function.prototype.apply()
,但在这种情况下,当我尝试:
.then(query.apply(this, ["SELECT * FROM ... "])) .then(function(rows){ /*...*/ })
链中的下一个函数将rows
undefined
为undefined
。
谢谢你。 你的帮助表示赞赏。
您必须将函数引用传递给.then()
以便您的select如下所示:
- 像你一样使用内联匿名函数。
- 创build你自己的效用函数,返回另一个函数(参见下面的例子)
- 使用
.bind()
来创build另一个函数。
内联匿名
some_function(/*...*/).then(function () { return query.apply("SELECT `whatever` FROM `wherever` ") }).then(/*...*/)
你自己的函数包装器
function queryWrap(q) { return function() { return query.apply(q); } } some_function(/*...*/) .then(queryWrap("SELECT `whatever` FROM `wherever` ")) .then(/*...*/)
如果你可以在多个地方使用它,这个包装会很有用。 可能不值得只是一个调用。
使用.bind()
some_function(/*...*/) .then(query.apply.bind(query, "SELECT `whatever` FROM `wherever` ")) .then(/*...*/)
在es6中,箭头函数解决了这个问题:
.then(() => query.apply("SELECT `whatever` FROM `wherever` ")) .then(rows => { /*...*/ })