【发布时间】:2016-07-20 16:49:13
【问题描述】:
find 是一个函数,它返回一个解析为一个值的承诺,但也有关于承诺对象本身的数据。一个实际用例是find() 返回一个可以在其他地方使用的 dbQueryObject,而await find() 使用 databaseResults 解析。例如:
function find () {
var results = new Promise(/* resolves with databaseResults */)
Object.assign(results, new dbQueryClass)
return results
}
我可以将find 包装成一个函数来提供这样的帮助,
function findPage (page) {
return find().skip(page*20).limit(20)
}
并像findPage().select('_id') 一样使用它来获取查询对象或使用await findPage().select('_id') 来获取解析值(返回类似于find() 的内容)。
但是,如果我用这样的承诺包装 find,
async function findSomething() {
var someArgs = await promise1()
if (someArgs) return find(someArgs)
return find()
}
如何在findSomething 之外获取find() 本身的值?我需要promise1 来解决,但我需要find() 来解决。 find() 是一个普通对象和一个 thenable,取决于你是否解析它,但解析 findSomething() 将自动解析返回的值。如何返回它以使其无法解决?
我的限制是我不能修改提供 find() 的库以不返回 thenable 对象。
【问题讨论】:
-
我不明白
Promise.resolve是如何执行查询的。如果它被传递了一个thenable,那么它本质上是一个空操作。无论如何,你的问题到底是什么? -
我的问题是,我如何不解决这个 thenable 但在此之前解决 thenables?
标签: javascript mongoose promise async-await