[英]AWS Lambda/Node.js function call sequence
The following piece of AWS lambda code (highly simplified): 以下一段AWS Lambda代码(高度简化):
'use strict';
var aws = require('aws-sdk');
var docClient = new aws.DynamoDB.DocumentClient();
exports.handler = (event, context, callback) => {
var inputorder = initInputAndDbParams(event);
queryOrders(inputorder)
.then(findSuitableOrder.bind(null, inputorder)) //findOrder requires query result
.then(placeNewOrder(inputorder));
callback(null, "ORDER OK");
}
function queryOrders(inputorder) {
return new Promise(function(resolve, reject) {
docClient.query(inputorder.dbparams.qparams, function(err, data) {
if (err) {
reject(err);
} else {
resolve(data); // gets back the query result array
}
}
}
// Recursive!!
function findSuitableOrder(inputorder) {
return new Promise(function(resolve, reject) {
if (array.length === 0 || orderamount === 0) resolve();
order = array.shift();
if (order.article = inputorder.article) {
deleteOrder(inputorder)
.then(placeNewOrder);
}
}
}
function deleteOrder(inputorder) {
return new Promise(function(resolve, reject) {
docClient.delete(inputorder.dbparams.delparams, function(err, data) {
if (err) {
reject(err);
} else {
resolve(data);
}
}
}
function placeNewOrder(inputorder) {
return new Promise(function(resolve, reject) {
docClient.put(inputorder.dbparams.wparams, function(err, data) {
if (err) {
reject(err);
} else {
resolve(data);
}
}
}
function placeOrderDelivery(inputorder) {
return new Promise(function(resolve, reject) {
docClient.put(inputorder.dbparams.odparams, function(err, data) {
if (err) {
reject(err);
} else {
resolve(data);
}
});
}
}
function initInputAndDbParams(event) {
var inputorder = {
article: "example",
price: 54
amount: 1
};
return inputorder;
}
The expected Order of the function calls is: 函数调用的预期顺序为:
Actual result like: 实际结果如下:
I am using promises in all functions, except in initInputAndDbParams which returns a value. 除了返回值的initInputAndDbParams之外,我在所有函数中都使用了Promise。 findSuitableOrder is called recursively to iterate through the array of orders.
递归调用findSuitableOrder以遍历订单数组。
How can I get the required sequence of function calls? 如何获得所需的函数调用顺序?
I got it: 我知道了:
queryOrders(inputorder).then(function (orders) {
return findSuitableOrder(inputorder, orders);
}).then(function() {
return placeNewOrder(inputorder);
}).catch(function (err) {
console.log(err);
That works an everything is in sequence. 一切正常都是有效的。
Thanks for all your posts and help! 感谢您的所有帖子和帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.