[英]How do I use async library calls in AWS Lambda functions?
我正在嘗試在AWS Lambda函數中使用由lob.com創建的nodejs-8.12庫。 代碼如下:
'use strict';
module.exports.handler = async (event, context) => {
var imagine all the variable defined here
console.log(front)
console.log(r)
// Create the address
Lob.addresses.create({
name: r.name,
email: '',
phone: '',
address_line1: r.address1,
address_line2: r.address2 || "",
address_city: r.city,
address_state: r.state,
address_zip: r.zipcode,
address_country: r.country
}, function (err, address) {
console.log(address)
if (err) {
console.log(err);
} else {
Lob.postcards.create({
description: '',
to: address.id,
front: front,
back: back,
}, function (err, postcard) {
var card = postcard
if (err) {
console.log(err);
} else {
console.log('The Lob API responded with this postcard object: ', postcard)
}
});
}
});
return {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
}),
};
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// return { message: 'Go Serverless v1.0! Your function executed successfully!', event };
};
現在我運行了lamda函數,在運行上面始終執行的代碼之前,我可以看到日志記錄。 但是在lambda關閉之前執行的上述代碼中,沒有任何控制台日志記錄。
我現在意識到該函數沒有等待任何回調。 我讀過某個地方,您在調用異步函數時需要使用invoke
,但是我不確定在使用外部庫來管理請求本身時該怎么做。 有沒有辦法告訴函數等待所有這些完成?
我已經解決了您的問題,如下所示:
'use strict';
module.exports.handler = async (event, context, callback) => {
//Create the address
var promise = new Promise((resolve,reject)=> {
Lob.addresses.create({
name: r.name,
email: '',
phone: '',
address_line1: r.address1,
address_line2: r.address2 || "",
address_city: r.city,
address_state: r.state,
address_zip: r.zipcode,
address_country: r.country
}, function (err, address) {
if(err) return reject(err)
return resolve(address)
});
})
promise.then((data) => {
Lob.postcards.create({
description: '',
to: data.id,
front: front,
back: back,
}, function (err, postcard) {
var message = 'Go Serverless v1.0! Your function executed successfully!'
var code = 200
if(err)
{
message = err;
code = 500
}
return callback(null, {
statusCode: code,
body: JSON.stringify({
message: message,
input: event,
}),
});
});
}).catch(reason => {
return callback(null, {
statusCode: 500,
body: JSON.stringify({
message: reason,
input: event,
}),
});
})
};
我用promise來解決第一個調用,一旦解決了它,就調用了第二個方法。
我為您准備了一個示例(異步,回調和Promise): 在這里工作
只是您必須修改您的代碼!
希望對您有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.