我得到了实现承诺的解决方案。我用过
deferred
承诺(&P);这对我很有效。
PapaParse
因此,我更新的过滤器如下-
uploader.filters.push({
name: 'fileTemplateFilter',
fn: function(item , options, deferred) {
vm.tableHeaders = undefined;
vm.fileHeaders = undefined;
var getCsvHeaders = function() {
return $http.post(csvHeadersUrl + vm.vendorWithSearchItem.selected.vendorid + '&fileName=' + item.name)
.then(function(success) {
vm.tableHeaders = success.data;
return vm.tableHeaders;
}, function(error) {
vm.tableHeaders = undefined;
throw error.status + " : " + error.data;
}).catch(function(e){
return false;
});
}
var getFileHeaders = function() {
var defer = $q.defer();
Papa.parse(item, {
worker: true,
skipEmptyLines: true,
step: function(results, parser) {
parser.abort();
vm.fileHeaders = results.data[0] || undefined;
results = null;
defer.resolve(vm.fileHeaders);
},
complete: function(results){
results = null;
}
});
return defer.promise;
}
$q.all([getCsvHeaders(), getFileHeaders()]).then(function() {
if(vm.fileHeaders && vm.tableHeaders) {
var is_same = (vm.fileHeaders.length == vm.tableHeaders.length) && vm.fileHeaders.every(function(element, index) {
return element === vm.tableHeaders[index];
});
if(is_same == true) {
deferred.resolve(is_same);
} else {
toastr.error('file template doesn\'t match for this file - ' + item.name + ' ...!', 'Error');
deferred.reject(false);
}
} else {
deferred.reject(false);
}
}, function(error) {
deferred.reject(error);
})
return deferred.promise;
}
});