0

我一直在尝试为 batchWriteItem() 创建参数,当我像这样创建它们时,它确实有效。

var params = {
RequestItems: {
    'tableNameXYZ' :  [ //hardcoded
   {
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": xyz
        },...
       }
      },
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": xyz1
        },...
       }
      }
  }
 ]
};

但是当我在变量中有表名时,我无法处理它:

var tableName = 'tableNameXYZ';
var params = {
RequestItems: {
    tableName :  [ 
   {
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": xyz
        },...
       }
      },
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": xyz1
        },...
       }
      }
  }
 ]
};

显然这是行不通的,因为我在这里粗暴地使用 JSON 对象。然后我尝试了这个:

var params = {};
params.RequestItems[tableName] = [
   {
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": xyz
        },...
       }
      },
     PutRequest: {
        "Item" : {
        "indexNumber":{
            "N": xyz1
        },...
       }
      }
  }
 ];

现在它给我一个错误,比如:

 TypeError: Cannot set property 'tableNameXYZ' of undefined
at exports.handler (/var/task/index.js:181:32)

有人可以指出我的错误吗?谢谢。

4

1 回答 1

0

您收到此错误是因为:

var params = {};

创建一个没有属性的空对象(称为params),但是:

params.RequestItems[tableName] = [ // ...rest of code

尝试分配params.RequestItems.the-value-of-tableName.

但是params没有被调用的属性RequestItems,所以params.RequestItems是未定义的。并且TypeError尝试将属性的值(在这种情况下the-value-of-tableName)设置在undefined.

要解决此问题,请使用:

var params = {};
params.RequestItems = {}; // assign RequestItems an empty object.
params.RequestItems[tableName] = [ // ...rest of code.
于 2018-11-23T10:39:21.287 回答