使用Promises

时间:2017-10-22 08:10:12

标签: javascript node.js promise amazon-dynamodb jest

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

我正在尝试使用promises来编写针对我的DynamoDB表的基本测试,以便在没有运气的情况下处理异步响应。它应该返回一个包含TableNames的对象。

如果我在不使用promises的情况下访问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请求不支持promises的文档,所以我很确定我错过了一些明显的东西......

感谢任何帮助。这是我第一次在这个论坛上提问,所以对这个问题本身的反馈也很感激。

编辑:解决问题 - 菜鸟错误 问题不在于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的帮助。

1 个答案:

答案 0 :(得分:0)

使用测试代码的Probem,而不是Promise

问题不在于dynamoDB或promises,而在于我使用了测试。在处理承诺时,必须返回承诺以进行适当的评估。否则,无法正确评估。

工作代码:

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 的反馈修正了工作代码示例 另外,删除了一些不必要的变量声明和赋值。