node.js - 请告诉我这两个代码之间的区别
问题描述
我认为他们俩都给了我同样的承诺,但后来一个并没有起到承诺的作用。它给了我“TypeError:data.then 不是函数”
try{
await docClient.get(params).promise().then(x => console.log(x));//this one works
const data = await docClient.get(params).promise();
data.then(x =>console.log(x));//this.doesen't
}
catch(err){
console.log(err);
}
功能日志:START RequestId:914e5709-7cf2-4978-9b58-d338ebee52dc 版本:$LATEST 2019-11-08T04:39:22.259Z 914e5709-7cf2-4978-9b58-d338ebee52dc
信息“事件:事件”
2019-11-08T04:39:22.437Z 914e5709-7cf2-4978-9b58-d338ebee52dc
INFO {项目:{名字:'Bob',ID:'12345',姓氏:'Johnson'}}
2019-11-08T04:39:22.487Z 914e5709-7cf2-4978-9b58-d338ebee52dc
信息类型错误:data.then 不是函数
在 Runtime.exports.handler (/var/task/index2.js:21:11) 在 process._tickCallback (internal/process/next_tick.js:68:7)
解决方案
在你的第一个声明中:
docClient.get(params).promise()
是一个承诺,所以当然,您可以.then()
向它添加一个处理程序,例如:
docClient.get(params).promise().then(...)
await
在它前面放一个:
await docClient.get(params).promise().then(...)
不影响.then()
本身,那仍然是一个方法调用docClient.get(params).promise()
。它只是等待.then()
. 如果您需要一些额外的括号来查看评估顺序,则如下所示:
await ( docClient.get(params).promise().then(...) )
尽管执行时不需要额外的括号。
在你的第二个声明中:
const data = await docClient.get(params).promise();
由于await
,变量data
包含了 promise 的解析值。这不是一个承诺。因此,当您尝试:
data.then()
变量中的值没有.then()
方法,data
所以这是一个错误。
推荐阅读
- r - Cook 的 Beta 回归距离
- karate - 空手道 - 从 json 文件中读取数据并将其分配给动态生成的请求
- python - 为什么 val_loss 和 val_accuracy 没有出现在时代
- jhipster - 我正在启动我的 JHIPSTER maven 服务器,但出现错误
- python - 如何在Python中找到未来时间的纪元时间
- java - Selenium Chrome 驱动程序 - 获取 java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 设置
- python - 每次执行后使用不同名称创建文件夹
- sql - 如何使用纬度和经度找到两点之间的距离
- c# - 无法在不同项目之间共享 ResourceDictionary
- c# - 使用 C# 的当前应用程序的活动时间