我正在使用api肥皂,但是在运行该函数时仅从for获得第一个结果,为什么不是所有查询都正确完成或正确完成?
我尝试过使用函数promise,然后在async / await函数中调用该函数,但这不起作用
const moment = require("moment");
const soap = require('soap');
module.exports = {
getData: function (params) {
var StationId = params.StationId;
var session = JSON.parse(params.session);
console.log("MALL ",StationId);
var promises = [];
var sippCodes = [
{sippcode: "EDMR", category:'Economico'},
{sippcode: "CDMR", category:'Compacto'},
{sippcode: "CDAR", category:'Compacto'},
{sippcode: "IDMR", category:'Intermedio'},
{sippcode: "IDAR", category:'Intermedio'},
{sippcode: "IFAR", category:'Suv'},
{sippcode: "SDMR", category:'Estandar'},
{sippcode: "SDAR", category:'Estandar'},
{sippcode: "FDAR", category:'Fullsize'}
];
// for(var m in malls) {
// promises.push(new Promise(function (resolve, reject) {
return new Promise(function (resolve, reject) {
const url = ''http://172.30.8.100:4000/SOAP?service=isCarRental_BookingInterface_Service';
var args = {
SessionId: session.SessionId,
CheckOutStationId:StationId,
CheckOutDate:moment(params.datetime[0]).format('YYYY-MM-DDThh:mm:ss'),//'2019-03-10T10:00:00',//
CheckInStationId:StationId,
CheckInDate:moment(params.datetime[1]).format('YYYY-MM-DDThh:mm:ss'),//'2019-03-11T10:00:00',//
Currency: "MXN",
WaiverPlan: "BASIC",
Waivers:[],
Extras:[],
DealId:0,
BookingNumber:0
};
var vehicles = [];
soap.createClient(url, function(err, client) {
client.GetCarAvailability2(args, function(err, result) {
if(result.Result && result.Result.AvailableCarList){
var avail = result.Result.AvailableCarList;
for(var i in avail.TICarWp){
if(avail.TICarWp[i].BookId){
var sippcode = avail.TICarWp[i].Group.SippCode.$value;
var category = avail.TICarWp[i].Group.Category.$value
var res = sippCodes.filter( item => item.sippcode == sippcode);
if(res.length > 0){
category = res[0].category
}
var vehicle = {
name : avail.TICarWp[i].Group.CarModel.$value,
price : avail.TICarWp[i].CarValuation.Total.$value,
currency : "MXN",
category : category
}
vehicles.push(vehicle);
}else{
console.log("no encuentra el carro");
}
}
resolve(vehicles);
}
});
});
});
}
}
function getData()
for(var i in malls){
var mall = malls[i];
var params = {
datetime: vm.datetime,
StationId: mall.StationId,
session: vm.session
};
const res = await vm.getDataPromise(params);
}
}
getDataPromise(params){
new Promise(function(resolve, reject){
axios.get("/getData", {
params
}).then(function (response) {
// console.log(response);
resolve(response.data);
})
.catch(function (error) {
reject({
error: true,
msg: "Sin datos"
});
})
})
}
我希望输出
[{data:data},{data:data},{data:data}]
但实际输出是
[{data:true},{},{}]
答案 0 :(得分:2)
person.title="Title"
person.surname="Surname"
person.job.description="Some description"
缺少return语句。您现在隐式返回undefined,而不是现在。
答案 1 :(得分:0)
您的getData函数应像下面那样构建promise数组:
async function getData()
var promises = [];
for(var i in malls){
var mall = malls[i];
var params = {
datetime: vm.datetime,
StationId: mall.StationId,
session: vm.session
};
promises.push(vm.getDataPromise(params));
}
return await Promise.all(promises)
}
并且您的getDataPromise缺少返回语句,该语句返回使用new创建的实际承诺