遵循以下文档
http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/using-promises.html

我正在尝试对我的DynamoDB表编写一个基本测试,并使用诺言来处理异步响应,但到目前为止还没有运气。它应该返回一个包含TableNames的对象。

如果我在不使用Promise的情况下访问DynamoDB对象,则没有问题。

这有效:

import AWS from 'aws-sdk'
AWS.config.loadFromPath('./awsConfig.json')

const dynamo = new AWS.DynamoDB({region: 'us-east-2'})

window.test('Test Connection', () => {
  return dynamo.listTables({Limit: 10}, (err, data) => {
    if (err) {
      console.log('err', err)
    } else {
      console.log('TableNames are:', data)
    }
    window.expect(data).toEqual(window.expect.anything())
  })
})


这不是:

import AWS from 'aws-sdk'
AWS.config.loadFromPath('./awsConfig.json')

const dynamo = new AWS.DynamoDB({region: 'us-east-2'})

window.test('Test Connection', () => {
  let tables
  const listPromise = dynamo.listTables({Limit: 10}).promise()
  listPromise.then((data) => {
    tables = data
    console.log('TableNames are:', data)
  }).catch((err) => {
    console.log('Error:', err)
  })
  window.expect(tables).toEqual(window.expect.anything())
})


数据的值始终是不确定的。我找不到任何表明DynamoDB请求不支持Promise的文档,所以我可以肯定我遗漏了一些明显的东西...

任何帮助表示赞赏。这是我第一次在此论坛上提问,因此也欢迎您对此问题进行反馈。

编辑:问题已解决-新秀错误
问题不在于dynamoDB,而在于使用test。处理承诺时,必须将承诺返回给test进行正确评估。否则,将无法评估。

工作代码:

import AWS from 'aws-sdk'
AWS.config.loadFromPath('./awsConfig.json')

const dynamo = new AWS.DynamoDB({region: 'us-east-2'})

window.test('Test Connection', () => {
  const listPromise = dynamo.listTables({Limit: 10}).promise()
  return listPromise.then((data) => {
    window.expect(data).toEqual(window.expect.anything())
  }).catch((err) => {
    console.log('Error:', err)
  })
})


更多信息:https://facebook.github.io/jest/docs/en/asynchronous.html

感谢@Brahma Dev的协助。

最佳答案

带有测试代码的Prompm,而不是Promise

问题不在于dynamoDB或promise,而在于我对test的使用。在处理承诺时,必须将承诺退回测试以进行正确评估。否则,将无法正确评估。

工作代码:

import AWS from 'aws-sdk'
AWS.config.loadFromPath('./awsConfig.json')

const dynamo = new AWS.DynamoDB({region: 'us-east-2'})

window.test('Test Connection', () => {
  const listPromise = dynamo.listTables({Limit: 10}).promise()
  return listPromise.then((data) => {
    window.expect(data).toEqual(window.expect.anything())
  }).catch((err) => {
    console.log('Error:', err)
  })
})


更多信息:https://facebook.github.io/jest/docs/en/asynchronous.html

感谢@Brahma Dev的协助。

编辑:根据来自@Brahma Dev的反馈更正了工作代码示例
另外,删除了一些不必要的变量声明和赋值。

关于javascript - 使用Promises从DynamoDB异步检索数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46871872/

10-16 04:25