请告诉我这两个代码之间的区别

我认为他们两个都给了我相同的诺言,但后来却不如诺言。它给我“ 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

INFO“事件:事件”

2019-11-08T04:39:22.437Z 914e5709-7cf2-4978-9b58-d338ebee52dc

INFO {项:{名:“鲍勃”,id:“ 12345”,姓:“约翰逊”}}

2019-11-08T04:39:22.487Z 914e5709-7cf2-4978-9b58-d338ebee52dc

INFO TypeError:data.then不是函数

在Runtime.exports.handler(/var/task/index2.js:21:11)     在process._tickCallback(internal / process / next_tick.js:68:7)

x4701481 回答:请告诉我这两个代码之间的区别

在您的第一句话中:

docClient.get(params).promise()

是一个承诺,因此,当然,您可以像这样添加.then()处理程序:

docClient.get(params).promise().then(...)

await放在其前面:

await docClient.get(params).promise().then(...)

不会影响.then()本身,但这仍然是对docClient.get(params).promise()的方法调用。它只是在等待.then()的结果。如果您需要一些额外的parens来查看评估顺序,它将像这样:

await ( docClient.get(params).promise().then(...) )

尽管执行时不需要多余的括号。


在第二句中:

 const data = await docClient.get(params).promise();

由于await,变量data包含了承诺的已解决值。这不是一个承诺。因此,当您尝试:

 data.then()

.then()变量中的值没有data方法,因此是错误的。

,

就像在错误中指出的那样,data.then不是函数。由于您await做出了承诺,因此此时的值是标量,因此您需要console.log(data)才能看到它。

,
await docClient.get(params).promise().then(x => console.log(x));

表示整个表达式docClient.get(params).promise().then(x => console.log(x))返回一个Promise,您await直到解决。

await docClient.get(params).promise()

表示您从表达式的这一部分得到一个承诺,然后await将其展开为一个普通值,这意味着data不是一个无条件的更多,因此data.then(x =>console.log(x))失败。

如果要在第二种情况下保留Promise,则不能await

const data = docClient.get(params).promise();
await data.then(x =>console.log(x));

尽管这可能不是很好,因为最好使用await或Promises而不是将链接的Promise API破坏到其中的await部分。您可以完全删除Promises API

const data = await docClient.get(params).promise();
console.log(data);

值得一提的是,您可以在回调中使用替代语法,但是Promise或await可能更好:

const data = docClient.get(params,function(err,data) {
  console.log(data);
});
本文链接:https://www.f2er.com/3139627.html

大家都在问