gpt4 book ai didi

javascript - 函数适用于 Promises

转载 作者:数据小太阳 更新时间:2023-10-29 06:01:18 24 4
gpt4 key购买 nike

我正在使用 bluebird 在 Node.js 中开发一个基于 promise 的项目,另一个是 ES6 的原生 promise 。在这两种情况下,我都有一个链,我在其中以以下形式查询数据库:

some_function(/*...*/)

.then(function () {
return query("SELECT `whatever` FROM `wherever` ")
})

.then(/*...*/)

请注意,query 显然会返回已解析为查询结果的 promise 。这在几个链中重复,我正在寻找一种方法来清理未使用的函数包装器。

我自然会使用 Function.prototype.apply() ,但在这种情况下,当我尝试时:

.then(query.apply(this, ["SELECT * FROM ... "]))
.then(function(rows){ /*...*/ })

链中的下一个函数将 rows 作为 undefined 获取。

提前致谢。感谢您的帮助。

最佳答案

您必须将函数引用传递给 .then(),因此您的选择如下:

  1. 照原样使用内联匿名函数。
  2. 创建您自己的返回另一个函数的效用函数(参见下面的示例)
  3. 使用 .bind() 创建另一个函数。

内联匿名

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(/*...*/)

关于javascript - 函数适用于 Promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32037989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com