2017-09-28 48 views
0

我一直在努力嘗試輸出我的承諾鏈的成功/錯誤。在AWS Lambda處理程序內部使用回調

我鏈接在一起的承諾像這樣

exports.handler = function(event, context, callback) { 
    Q.allSettled(init()).then(function (result) { 

    requestValid(event.queryStringParameters) 
     .then(isDuplicate) 
     .then(process) 
     .then(insertData) 
     .then(displayResponse) 
     .catch(function (error) { 
      // Handle any error from all above steps 
      console.error(
       'Error: ' + error 
      ); 
      callback({ 
       statusCode: 500, 
       body: JSON.stringify({ 
        message: error 
       }, null) 
      }); 
     }) 
     .done(function() { 
      console.log(
       'Script Finished' 
      ); 
      callback(null, { 
       statusCode: 200, 
       body: JSON.stringify({ 
        message: 'Done' 
       }) 
      }); 
     }); 
    }); 
}; 

我呼籲承諾的內成功上失敗,Q.defer.resolve(success_message)。如果這些承諾中的任何一個失敗,錯誤將被捕獲到.catch(function (error) {

這一切都很好,但我如何將這些數據返回給處理程序的回調?

的是我想做的事,但沒怎麼/在哪裏把它,因爲承諾的例子...

exports.handler = function (event, context, callback) { 
    let response = { 
     statusCode: 200, 
     body: JSON.stringify('some success or error') 
    }; 

// Return all of this back to the caller (aws lambda) 
    callback(null, response); 
}; 

預先感謝您..

+1

似乎您正在使用AWS API Gateway進行通訊..無論如何,請嘗試使用箭頭函數替換所有函數,並讓我知道它是否可行! –

+2

你能否澄清你的問題? 首先,爲什麼即使發生錯誤,您仍然使用'null'值調用回調函數? 實際上這個函數的當前行爲是什麼,它只是通過超時或什麼完成的? –

+0

@ArtemArkhipov我想在使用promise時正確使用回調函數。我已經更新了這個。我的印象是,使用哪個參數並不重要,因爲我只想將此回調函數返回給lambda。我不知道他們的表現與衆不同,儘管一方面出錯而另一方面取得成功。 –

回答

0

Chain your promises all the way you usually do it。返回鏈上最後一步的結果。 catch錯誤末,並返回錯誤如果有的話:這是假設isDuplicateprocessinsertDatagetResposne返回一個承諾

exports.handler = function(event, context, callback) { 

    RequestIsValid(event) 
    .then(isDuplicate) 
    .then(process) 
    .then(insertData) 
    .then(getResponse) 
    .then(function(result) { 
     //result would be the returning value of getResponse. 
     callback(null, { 
      statusCode: 200, 
      body: JSON.stringify({ 
       message: 'Done', 
       response: result 
      }) 
     }); 
    }) 
    .catch(function (error) { 
     // this will show on CloudWatch 
     console.error(
      'Error: ' + error 
     ); 
     // this will be the response for the client 
     callback({ 
      statusCode: 500, 
      body: JSON.stringify({ 
       message: error 
      }, null) 
     }); 
    }) 

// end of the function 
} 

以及各自的結果可以鏈接到下一個。

相關問題