所以我有个密码:
module.exports.getEstimate = (event, context, callback) => {
var data = JSON.parse(event.body);
lalamove.getQuotation(data ,context, function(err, llm_data){
callback(null,llm_data)
});
};
因此,它调用lalamove.getQuotation函数并返回一个对象:
{ "totalFee": "108", "totalFeeCurrency": "PHP" }
现在,我添加了一个新函数,它返回这个对象:
{ "totalFee": "10", "totalFeeCurrency": "PHP" }
从一个不同的函数,所以我认为我应该把它们放在一个数组中,然后当我调用回调时,它不起作用,这就是我尝试过的
module.exports.getEstimate = (event, context, callback) => {
var data = JSON.parse(event.body);
var response = []
lalamove.getQuotation(data ,context, function(err, llm_data){
const llm_obj = { "lalamove": llm_data }
response.push(llm_obj);
});
inhouse.getQuotation(data ,context, function(err, ih_data){
const ih_obj = {"inhouse": ih_data }
response.push(ih_obj);
});
callback(null,response);
};
我想要的是这样的回应:
["lalamove": { "totalFee": "108", "totalFeeCurrency": "PHP" },
"inhouse": { "totalFee": "10", "totalFeeCurrency": "PHP" }]
我做错什么了?
发布于 2019-07-12 07:00:51
欢迎来到世界的Javascript世界-回调地狱。
我们对你的情况有一些选择:回调地狱,异步库,承诺,异步/等待.
回调地狱:在回调中调用异步函数
module.exports.getEstimate = (event, context, callback) => {
var data = JSON.parse(event.body);
var response = []
lalamove.getQuotation(data, context, function (err, llm_data) {
const llm_obj = { "lalamove": llm_data }
response.push(llm_obj);
// lalamove.getQuotation done!
// call next action
inhouse.getQuotation(data, context, function (err, ih_data) {
const ih_obj = { "inhouse": ih_data }
response.push(ih_obj);
// inhouse.getQuotation done!
// call the last action
callback(null, response);
});
});
};
异步库:异步 --您可以使用waterfall
函数按顺序执行操作,如果顺序无关紧要,则使用parallel
。
module.exports.getEstimate = (event, context, callback) => {
var data = JSON.parse(event.body);
var response = []
async.parallel([
function (next) {
lalamove.getQuotation(data, context, function (err, llm_data) {
// TODO: check err object
const llm_obj = { "lalamove": llm_data }
response.push(llm_obj);
// lalamove.getQuotation done!
// do next action
next();
});
},
function (next) {
inhouse.getQuotation(data, context, function (err, ih_data) {
const ih_obj = { "inhouse": ih_data }
response.push(ih_obj);
// inhouse.getQuotation done!
// do next action
next()
});
}
], function (err) {
// TODO: check err object
// call the last action
callback(null, response);
});
};
发布于 2019-07-12 06:33:51
您的callback(null,response)
不会等待这两个回调函数完成。您可以使用允诺并使用Promise.all(objs).then(function)
等待所有承诺完成并运行。
发布于 2019-07-12 06:41:03
尝试在Promise
中包装两个引号,然后使用Promise.all
等待它们都完成,然后将结果返回给callback
module.exports.getEstimate = (event, context, callback) => {
let data = JSON.parse(event.body);
// wrap quotation calls in `Promise`
Promise.all([
new Promise(resolve => lalamove.getQuotation(data, context, (err, lalamove) => resolve({ lalamove }))),
new Promise(resolve => inhouse.getQuotation (data, context, (err, inhouse ) => resolve({ inhouse }))),
]).then(response => {
// return the result back to `callback`
callback(null, response);
})
};
https://stackoverflow.com/questions/57001273
复制相似问题