遵循文档 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的帮助。
答案 0 :(得分:0)
问题不在于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 的反馈修正了工作代码示例 另外,删除了一些不必要的变量声明和赋值。