为什么在完成请求之前我的Lambda函数已退出?

时间:2017-04-10 14:24:38

标签: javascript aws-lambda

我有以下Lambda函数,我是按照PluralSight教程编写的[我对js知之甚少。这样做是为了学习API网关< - > Lambda教程]

我编写了完全相同的函数,只有{}作为测试json:

var faker = require('faker');

exports.handler = function(event, context){
    var inventory = [];
    for(var i = 0; i < 10; i++){
        var shoe = {};
        var shoeType = getShoeType();
        shoe.name = getShoeName(shoeType);
        shoe.color = getShoeColor();
        shoe.description = getShoeDescription(showType);
        shoe.size = getShoeSize();
        shoe.price = getShoePrice();

        inventory.push(shoe);
    }

    context.succeed(inventory);
}

function getShoeName(showType){
    return faker.company.catchPhraseNoun() + " " + faker.company.catchPhraseDescriptor() + 
    " " + showType;
}

function getShoeColor(){
    return faker.commerce.color();
}

function getShoeDescription(shoeType){
    return "A(n)" + faker.commerce.productAdjective() + ", " + faker.commerce.productAdjective() + 
    " " + shoeType + "made from the finest " + faker.commerce.productMaterial() + "designed for the " +
    faker.commerce.bsBuzz() + " individual!";
}

function getShoeSize(){
    return getNum(1, 13);
}

function getShoePrice(){
    return faker.commerce.price();
}


function getShoeType(){
    var shoeType = [
    "running shoes",
    "training shoes",
    "tennis shoe",
    "cricket shoe",
    "other shoe"
    ]
    return shoeType[getNum(0, 5)];
}

function getNum(min, max){
    return Math.floor(Math.random() * (max - min +1)) + min;
}

然而,Lambda提出了这个错误:

{
  "errorMessage": "RequestId: e5566a3c-1df8-11e7-8b71-d961323b4fcf Process exited before completing request"
}

我也检查了context.succeed()的位置,而且完全没问题。

那么,我哪里出错?

1 个答案:

答案 0 :(得分:1)

我看到的一个错误是getShoeName()函数。此函数具有5种鞋类型的数组(数组索引0到4)。

但是由于您传递给随机数函数的参数,它返回0到5之间的值。因此当随机数函数返回5时,它会生成错误b / c show type array的最后一个元素是在索引4,而不是5。

编辑:在进一步审核时,这可能不会导致函数在完成请求之前退出...但您可能会看到&#34; undefined&#34;在showType返回的字符串中。

编辑#2 另一个错误是您将未定义的变量shoeType(而不是getShoeDescription())传递给<View style={styles.formContainer}> <TouchableHighlight onPress={this.props.authentication}> <Icon.Button name="facebook" style={styles.loginIconButton}> <Text style={styles.loginButtonText}>Login with Facebook</Text> </Icon.Button> </TouchableHighlight> </View> 函数。

没有看到发生的真正错误是我在使用AWS Lambda时遇到的令人沮丧的事情之一。我最终开始使用无服务器框架,它具有让你在本地运行Lamdba功能的好处 - 如果你这样做,你将得到更好的错误信息。