2

我需要通过非键属性从DynamoDBvia获取记录(-s)。Dynamoose例如,我需要从someModel字段my_field等于的表中获取所有记录111。我通过以下方式做到这一点:

const data = await someModel.query("my_field").eq("111").exec();

这段代码停止执行!我的意思是后面的代码不会被调用。

如果我将代码更改为此:

const data = await someModel.query("my_field").eq("111");

我的查询正在运行,但data包含:

{
  "options": {
    "all": {
      "delay": 0,
      "max": 1
    }
  },
  "query": {
    "hashKey": {
      "name": "my_field",
      "value": "111"
    }
  },
  "filters": {},
  "buildState": false,
  "validationError": null,
  "notState": false,
  "success": true
}

我知道上面的代码是为查询准备的查询参数,但是我如何应用它们并执行查询DynamoDB呢?当然,查询代码放在async函数内部——这就是await写在那里的原因。

我还使用serverless框架来描述DynamoDB方案。但是我写的所有模型都是通过dynamoose.

我错在哪里?

4

1 回答 1

1

正如这里的文档中提到的,Dynamoosequery在回调中返回值,而不是作为承诺。因此,您的响应实际上是在一个回调中返回的,该回调应该在exec您的查询部分中。async/await对 Promise 有效,对回调无效。

someModel.query("my_field").eq("111").exec((err, data) => {
    // Do whatever you wish to with your data
});
于 2018-07-18T23:34:15.680 回答