我正在尝试返回一个异步函数,但是我得到的是promise: < { PENDING } >
或[object Promise]
而不是[object Object]
我尝试使用Promise.resolve(value)
,Promise.resolve().then(return value)
,return new Promise((resolve, reject) => {resolve(value)}
从顶层到底层,我的代码如下:
//Top-Level
const getNext = require('getNext');
const next = getNext({
page,
value,
name,
id,
});
//getNext
const controllerMap = {
intro: introController
};
async function getNext({ page, value, name, id}) {
const controller = controllerMap[name];
return await controller({
page,
value,
name,
id
});
}
// Controller
async function introController({ page, value, id }) {
switch(page)
case 10:
// Do something async ie:
await db.query
default: return intro[page]
};
如果我从函数中移除async
和await
,然后从db.query
案例中提取我的底层controller
到它自己的async function
中,得到promise: < { PENDING } >
,所以我在想这是因为顶层函数没有等待它解决。但是,当我使这些函数异步时,它们将为我的静态数据返回promise。我在将这些嵌套的promise / async函数包起来时遇到了麻烦。
答案 0 :(得分:3)
您不能使异步代码同步。
通过await
关键字,您可以编写看起来像同步但实际上是异步的代码。
您只能在await
函数内部使用async
。
要使await
正常工作,所有 async
函数都应返回承诺。这些承诺被确定为函数的返回值。
简而言之:您具有正常和预期的行为,并且不能阻止async
函数返回诺言。
答案 1 :(得分:0)
我通过在顶层getNext()
中又添加一个等待来解决了这个问题
const next = await getNext({
page,
value,
name,
id,
});
位于异步router.post
调用中。因此答案是:确保所有功能一直到顶部都是异步的,以便彼此等待。