遵循以下文档
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/