我有以下云函数,它不会返回值,即使我们有一个显式的响应,它被记录在返回语句之前:
export const startFormatInitialAtlistedData = functions
.runWith(runtimeOpts)
.region("us-central1")
.https.onCall(async (data) => {
functions.logger.log("THIS IS data startFormatInitialAtlistedData", data);
return manageFormatInitialAtlistedData().then((locresp) => {
functions.logger.log(
"startFormatInitialAtlistedData: resp!!!!!",
locresp
);
if (locresp.success) {
functions.logger.log(
"startFormatInitialAtlistedData: resp.success!!!!!",
locresp.success
);
return ({success: true, fileName: "", exit: 18});
} else {
return ({success: false, fileName: "", exit: 19});
}
})
.catch((err) => {
functions.logger.log(
"startFormatInitialAtlistedData error",
err);
return Promise.reject(err);
});
});
manageFormatInitialAtlistedData返回一个类似Promise({success: true, fileName: "; exit: 14})的响应,从下面的日志中我们可以看到它被返回了:
{"success"真的,"fileName":","exit": 14日"severity":"INFO","message":"startFormatInitialAtlistedData:职责! !"}
下一条日志语句确认我们正在返回语句:
{"severity"INFO","message":"startFormatInitialAtlistedData: resp.success ! !true"}
我看到的唯一奇怪的事情是第一个记录的消息以错误的顺序打印,它应该是这样的:
{"severity"INFO","message":"startFormatInitialAtlistedData:职责! !","success":真的,"fileName":","exit": 14}
我很好奇为什么这是不工作,因为我所有的其他函数返回语句没有问题。同样值得注意的是:我已经尝试在这里使用return await manageFormatInitialAtlistedData(),对输出没有影响。我非常困惑,为什么我的响应被记录,但实际上没有返回,这使得函数执行,直到它超时。
您可能没有在manageFormatInitialAtlistedData
函数中解析Promise
。
看看这个小提琴:https://jsfiddle.net/y9jp6ag2
function manageFormatInitialAtlistedData() {
return Promise.resolve({success: true, fileName: "", exit: 14});
}
async function myFunc() {
return manageFormatInitialAtlistedData().then((resp) => {
if (resp.success) {
return ({success: true, fileName: "", exit: 18});
} else {
return ({success: false, fileName: "", exit: 19});
}
});
}
(async () => {
const ret = await myFunc()
console.log(ret);
})();