亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這是處理 JavaScript 承諾的正確方法嗎?

這是處理 JavaScript 承諾的正確方法嗎?

慕少森 2022-06-16 14:41:39
請原諒我,但我對 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
查看完整描述

2 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

你正在混合兩者。這是異步/等待


 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 代碼


查看完整回答
反對 回復 2022-06-16
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

編寫 promise 有兩種主要方法,首先使用 resolve 和 reject 函數,其次使用 .then 和 .catch 函數。


第一個案例示例:


let promise = new Promise(function(resolve, reject) {

  setTimeout(() => reject(new Error("Whoops!")), 1000);

});


// reject runs the second function in .then

promise.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


查看完整回答
反對 回復 2022-06-16
  • 2 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號