首页 > 解决方案 > 请告诉我这两个代码之间的区别

问题描述

我认为他们俩都给了我同样的承诺,但后来一个并没有起到承诺的作用。它给了我“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)

标签: node.jsamazon-web-servicesasync-await

解决方案


在你的第一个声明中:

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所以这是一个错误。


推荐阅读