node.js - Lambda 节点“hello undefined”异步/等待不起作用?
问题描述
这是我的问题:我想在我的 aws-lambda 函数(nodejs 12)中调用 Vimeo api,以获取有关视频的一些信息/数据(例如:持续时间、标题、...)。
这是我的代码:
exports.handler = async event => {
let Vimeo = require("vimeo").Vimeo;
let client = new Vimeo("{client_id}", "{client_secret}", "{access_token}");
console.log('client => ',
client);
console.log('event => ', event);
video_id = event.video_id;
const res = await client.request(
{
method: "GET",
path: `/users/1234567890/videos/${video_id}`
},
function(error, body, status_code, headers) {
if (error) {
console.log("error", error);
}
console.log("body", body);
console.log("status code");
console.log(status_code);
console.log("headers");
console.log(headers);
return body;
}
)
console.log('hello', res);
return 'ok';
};
为了尝试它,我启动了一些测试。lambda returnok
所以我知道我的函数会执行除 console.log return 之外的所有指令hello undefined
。
client.request(...)
对我来说(我的意思是我猜)这是回调,目前我知道如果你等待足够的时间,100% 的回报是好的;但即使lambda 看起来太忙,无法等待 vimeo api 的响应async function
。await
谢谢,祝你有美好的一天
解决方案
await client.request()
不返回等待的承诺。
你需要像这样自己做:
exports.handler = async event => {
const Vimeo = require('vimeo').Vimeo
const client = new Vimeo('{client_id}', '{client_secret}', '{access_token}')
console.log('client => ', client)
console.log('event => ', event)
const videoId = event.video_id
const res = await new Promise((resolve, reject) => {
client.request({
method: 'GET',
path: `/users/1234567890/videos/${videoId}`
},
function (error, body, statusCode, headers) {
if (error) {
console.log('error', error)
reject(error)
return
}
console.log('body', body)
console.log('status code')
console.log(statusCode)
console.log('headers')
console.log(headers)
resolve(body)
}
)
})
console.log('hello', res)
return 'ok'
}
推荐阅读
- excel - 如何从 VBA 中的用户定义函数输出带两位小数的数字?
- appwrite - Appwrite 错误:Inavlid Origin。注册您的新客户(
) 作为项目控制台上的新 Web 平台 - android - 如何检查我们是否在 Android 上拥有特定的文件 uri 权限?
- javascript - 等待给函数的回调的问题
- tensorflow - 通过 pickle 保存 RL 代理,由于 pickle.thread_RLock 无法保存 - 此错误的根源是什么?
- reactjs - Next.js 和 Gatsby.js 是否使用拆分代码可加载组件?
- oracle - 在插入到 oracle 表之前比较差异
- ffmpeg - 使用ffmpeg录制时从视频中提取帧
- r - 在定义之前如何使用 R 函数
- sql - 将 Varchar2 数据转换为数字