我一直在努力尝试输出我的承诺链的成功/错误。
我像这样链接承诺
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.reject(error_message);
,在承诺内部成功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);
};
提前谢谢..
答案 0 :(得分:0)
Chain your promises all the way you usually do it。将结果返回到链的最后一步。最后出现catch
个错误,如果有错误则返回错误:
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
}
假设isDuplicate
,process
,insertData
和getResposne
返回一个承诺,每个承诺的结果可以链接到下一个承诺。< / p>