Я пытаюсь создать навык для Amazon Echo, который будет вызывать JSON-файл с AWS S3. Когда я вызываю код из s3 basic get function, он работает. И код Amazon Alexa работает сам по себе.Функция aws lambda s3 не вызвана внутри набора навыков алексей
Но когда я их называю, функция пропускается. Таким образом, для следующего кода консоль вызывается до и после s3.getObject()
. Но средний пропущен. Я не понимаю, почему.
Я также проверил, был ли вызван s3, и это так.
let aws = require('aws-sdk');
let s3 = new aws.S3({ apiVersion: '2006-03-01'});
function callS3() {
console.log('loading S3 function');
var myData = [];
const params = {
Bucket: 'cvo-echo',
Key: 'data.json'
};
console.log("trying to get s3");
s3.getObject(params, (err, data) => {
if (err) {
console.log('error in s3 get: \n' + err);
//const message = `Error getting object ${key} from bucket ${bucket}.
// Make sure they exist and your bucket is in same region as this function.
//console.log(message);
} else {
console.log('CONTENT TYPE: ', data.ContentType);
console.log('Data body: \n' + data.Body.toString());
myData = JSON.parse(data.Body.toString());
console.log('myData.length = ' + myData.length);
}
console.log('myData >> ' + myData);
});
console.log('finished callS3() func');
return myData;
}
Я попытался использовать async, однако я не думаю, что я сделал это правильно. вот как я попробовал: [s3 с async] (http://pastebin.com/aGZLq4Xt) –
Вы пытаетесь смешивать функции синхронизации с асинхронными функциями, и это не сработает, вам нужно избавиться от вашего возвращения и вместо этого получить это значение, используя обратные вызовы. Поэтому в итоге вы в основном замените return myData на callback (myData). Сейчас я сейчас ухожу, но позже я уточню свой ответ. Надеюсь, это даст вам некоторое представление о том, как решить вашу проблему. –
@ManjurKhan Я обновил свой ответ с помощью образца кода. –