我的可调用函数如下所示:
exports.function = functions.https.onCall((data, context) => {
let result1, result2;
async function function1() {
return 1;
}
async function function2() {
return 2;
}
return Promise.all([
result1 = function1(),
result2 = function2()
])
.then(() => {
console.log(result1);
console.log(result2);
return {
result1: result1,
result2: result2
}
})
})
我在客户端得到的result1和result2没有任何值,只有一个名为domain的字段。我的云功能出了什么问题?
日志输出
Promise {
1,
domain:
Domain {
domain: null,
_events: { error: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
members: [] } }
Promise {
2,
domain:
Domain {
domain: null,
_events: { error: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
members: [] } }
您正在捕获function1
和function2
返回的承诺,并尝试将它们直接发送到客户端。这行不通。您需要在Promise.all()
返回的promise的回调中获取它们已解析的值。
return Promise.all([
function1(),
function2()
])
.then((result1, result2) => {
console.log(result1);
console.log(result2);
return {
result1: result1,
result2: result2
}
})
请注意,您甚至不需要在更高的范围中声明result1和result2。