我正试图从另一个CF内部用 axios 调用Google Cloud Function(CF),但我一直在 这个错误:
TypeError: A value undefined was yielded that could not be treated as a promise
我从处理程序调用{{1}}并在执行任何数据库更新之前调用update()
。
以下是代码:
clientHasRightToEdit
在我的package.json中,我声明了axios依赖:
const axios = require('axios')
var Promise = require('bluebird')
let clientHasRightToEdit = (req) =>{
let clientToken = req.query.token
let objectId = req.query.objectId
let verificationUri = "[ANOTHER_CF_HTTP_TRIGGER]"
return axios.get(verificationUri, {
params: {
id: objectId,
token: clientToken
}
}).then(response => {
if(response.data == "verified") return true
else return false
})
.catch(err => {
return false
})
}
const update = (req, res) => {
Promise.coroutine(function*() {
let verification = yield clientHasRightToEdit(req)
if(verification == false){
return res.json({
"code": "400",
"message": "Verification failure",
"body": "You are not allowed to edit this object"
})
}else{...}
})()
}
我在这里缺少什么。 imo返回axios.get应返回一个Promise,它将在yield“继续”之前等待解析。我已经尝试了很多方法(语法方面)来做同样的但是有相同的错误。
换句话说,我在这里搞砸了语法还是谷歌特有的东西在这里我不知道?
谢谢!
答案 0 :(得分:0)
时间解决了这个问题。
今天我编写了2个非常简单的云函数:1)父2)使用 axios 在父级中调用Child的子项。
我在问题中使用了相同的Promise和yield方法(和语法),它似乎立即起作用。
感到困惑我回到原始代码,它在之前的部署中起作用。
它似乎很难启动(我上次给它一个小时),但今天已经过了12个。
摘要:
以下是我的测试功能:
子:
//handler
export const handlerSimple = (req, res) => {
if (req.method === 'GET') {
return res.json({
"code": "200",
"message": "Success",
"body": "This is child responding"
})
}
}
父:
require('dotenv').config()
var Promise = require('bluebird')
import axios from 'axios'
let getChildResponse = (req) =>{
let childUrl = [CHILD_CF_URI]
return axios.get(childUrl, {
}).then(response => {
return response.data
})
.catch(err => {
return false
})
}
//handler
export const handlerSimple = (req, res) => {
if (req.method === 'GET') {
Promise.coroutine(function*() {
let response = yield getChildResponse(req)
if(response == false){
return res.json({
"code": "400",
"message": "Error",
"body": "Axios call to child failed"
})
}else{
return res.json({
"code": "200",
"message": "This is parent responding, child in body",
"body": response
})
}
})()
}
}