这是处理 JavaScript 承诺的正确方法吗?

请原谅我,但我对 JS 承诺不熟悉。我认为我需要使用一个与 AWS 服务交互,该服务从 DynamoDB 写入和提取数据。我有一个由无服务器 npm 插件运行的 JavaScript 应用程序,它将导出的函数定义为端点。在 promise 完成后的这些端点中,我需要将数据冒泡备份到端点以将其公开为 JSON 主体。请参阅下面的代码。


exports.getBlog = async (event) => {

    return getBlogPost(event).then((data) => {

        console.log("worked", data);

        var response =  {

            statusCode: 200,

            body: JSON.stringify(data)

        };


        return response;

    })

    .catch((error) => {

        console.log("didn't work");

        var response = {

            statusCode: 400,

            body: JSON.stringify(error.toString())

        };


        return response;

    });

}

让我觉得不正确的是我必须创建 avar response并返回它,然后在exports.getBlog. 这是正确的吗?它使 JSON 打印正确,但是从在线阅读教程中对这是否是好的做法感到困惑?


如果不是,您将如何从 Promise 返回数据并将其公开为 JSON 结果?


在此示例中,exports.getBlog无服务器框架将其引用为端点,如下所示:-


functions:

  get-blog:

    handler: api/blog.getBlog

    events:

      - http:

          path: api/v1/blog

          method: GET

          cors: true


慕少森
浏览 128回答 2
2回答

莫回无

你正在混合两者。这是异步/等待 exports.getBlog = async (event) => { try {    var res = await getBlogPost(event);    var data = res.data;    console.log("worked", data);    var response =  {        statusCode: 200,        body: JSON.stringify(data)    };    return response;} catch(error) {    console.log("didn't work");    var response = {        statusCode: 400,        body: JSON.stringify(error.toString())    };    return response;   }}并且没有exports.getBlog = event => {    return getBlogPost(event).then((data) => {    console.log("worked", data);    var response =  {        statusCode: 200,        body: JSON.stringify(data)    };    return response;}).catch((error) => {    console.log("didn't work");    var response = {        statusCode: 400,        body: JSON.stringify(error.toString())    };    return response;});}好读:https ://hackernoon.com/6-reasons-why-javascripts-async-await-blows-promises-away-tutorial-c7ec10518dd9编辑:添加MDN关于 async/await 的文章以及如何用它重写 promise 代码

翻翻过去那场雪

编写 promise 有两种主要方法,首先使用 resolve 和 reject 函数,其次使用 .then 和 .catch 函数。第一个案例示例:let promise = new Promise(function(resolve, reject) {  setTimeout(() => reject(new Error("Whoops!")), 1000);});// reject runs the second function in .thenpromise.then(  result => alert(result), // doesn't run  error => alert(error) // shows "Error: Whoops!" after 1 second);第二种情况示例:如果我们只对成功完成感兴趣,那么我们可以只为 .then 提供一个函数参数:let promise = new Promise(resolve => {  setTimeout(() => resolve("done!"), 1000);});promise.then(alert); // shows "done!" after 1 second如果我们只对错误感兴趣,那么我们可以使用 null 作为第一个参数:.then(null, errorHandlingFunction)。或者我们可以使用 .catch(errorHandlingFunction),完全一样:let promise = new Promise((resolve, reject) => {  setTimeout(() => reject(new Error("Whoops!")), 1000);});// .catch(f) is the same as promise.then(null, f)promise.catch(alert); // shows "Error: Whoops!" after 1 second
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript