Javascript 在Angular 4中将数组合并到Promise中后,将其显示为未定义数组
我有一个功能:Javascript 在Angular 4中将数组合并到Promise中后,将其显示为未定义数组,javascript,angular,promise,Javascript,Angular,Promise,我有一个功能: filterAllComponent(inputdata) { let a=[], b=[],c=[]; a= this.getfilterPlaces(inputdata); b= this.getfilterTransporter(inputdata); c= this.getfilterVehicles(inputdata); let getplaceArray = [], getTransporterArray = [],
filterAllComponent(inputdata) {
let a=[], b=[],c=[];
a= this.getfilterPlaces(inputdata);
b= this.getfilterTransporter(inputdata);
c= this.getfilterVehicles(inputdata);
let getplaceArray = [],
getTransporterArray = [],
getVehicleArray = [];
let getPlacePromise = function () {
const self = this;
return new Promise(function (resolve, reject) {
getplaceArray = a;
resolve("got places\n");
});
};
let getTransporterPromise = function (message) {
const self = this;
return new Promise(function (resolve, reject) {
getTransporterArray = b
resolve(message + "got Transporter");
});
};
let getVehiclePromise = function (message) {
const self = this;
return new Promise(function (resolve, reject) {
getVehicleArray = c
resolve(message + "got vehicle");
});
};
getPlacePromise().then(function (result) {
return getTransporterPromise(result);
}).then(function (result) {
return getVehiclePromise(result);
}).then(function (result) {
var AllDropdownValues = getTransporterArray.concat(getVehicleArray).concat(getplaceArray);
console.log(AllDropdownValues);
});
}
需要使用getVehicleArray、getplaceArray和getTransporterArray关联数组的所有下拉值。
在最终结果中,数组getplaceArray显示未定义。其余的结果显示正确
调用函数:
getfilterTransporter(autocompleteInputData) {
var k= this.checkRegex(autocompleteInputData);
this.getfilteredTransporter= this.filterTransporters(k);
return this.formatTransporterValue(this.getfilteredTransporter);
}
getfilterVehicles(autocompleteInputData) {
var k= this.checkRegex(autocompleteInputData);
this.getfilteredVehicle= this.filterVehicles(k);
return this.formatVehicleValue(this.getfilteredVehicle);
}
getfilterPlaces(autocompleteInputData) {
if (autocompleteInputData == '' || typeof(autocompleteInputData) == 'object')
return null;
this.placeData.getPlacesFromPig(autocompleteInputData)
.subscribe(response =>
return this.formatPigResponse(response);
});
}
对于getfilterPlaces,subscribe()用于从API调用中提取数据。但是当我调用函数filterAllComponent()时,getfilterPLaces没有被填充,但是其他两个函数运行正常。代码的问题是,订阅中的
返回表达式
没有作为getfilterPLaces函数的返回值返回。这意味着,如果设置了autocompleteInputData
,并且没有对象,则getfilterPlaces函数
没有指定的返回值
问题是,this.placeData.getPlacesFromPig
似乎是一个异步函数,返回一个rjxs Observable
或类似的东西。避免此问题的一种方法是使用wait
运算符和。为此,必须将getfilterPlaces
和filterAllComponent函数
标记为async
,并使用a=wait.getfilterPlaces(inputData)
。另外,getfilterPlaces
需要返回一个Promise
。假设this.placeData.getPlacesFromPig
返回一个rxjs Observable
,代码如下所示:
async function getfilterPlaces(autocompleteInputData) {
if (autocompleteInputData == '' || typeof(autocompleteInputData) == 'object')
return null;
return this.placeData.getPlacesFromPig(autocompleteInputData)
.toPromise()
.then(response => this.formatPigResponse(response));
}
很多。这正是我需要的。工作完美
async function filterAllComponent(inputdata) {
let a=[], b=[], c=[];
a = await this.getfilterPlaces(inputdata);
b = this.getfilterTransporter(inputdata);
c = this.getfilterVehicles(inputdata);
[...]