【发布时间】:2019-06-07 05:24:48
【问题描述】:
在 Promise 中声明的变量首先被返回,然后函数被执行
我有以下一段代码,它首先获取一些过滤器值并将它们推送到 filterFetchPromises。获取过滤器的函数本身就是一个异步函数。然后我在 filterFetchPromises 中处理数据,然后我必须返回处理后的数据。用于存储处理数据的变量在 getfilters() 函数中声明,因为我需要在每次迭代后将它们设置为空。
目前,当我打印出过滤器名称、过滤器值时,它们只是显示为空。如何先处理来自 filterFetchPromises 的数据,然后返回这些值?
function getfilters() {
return new Promise(function(resolve) {
let filterFetchPromises = [];
let dashboardfilters = [];
let filternames = [];
let filtervalues = [];
filterFetchPromises.push(worksheet.getFiltersAsync());
Promise.all(filterFetchPromises).then(function (fetchResults) {
fetchResults.forEach(function (filtersForWorksheet) {
filtersForWorksheet.forEach(function (filter) {
dashboardfilters.push(filter);
if (contains(filternames, filter.fieldName)) {
console.log("Duplicate Entry")
}
else {
let filtervalues_temp = []
console.log(filter.fieldName)
if ((filter.appliedValues).length > 0) {
filternames.push(filter.fieldName)
console.log(filter.fieldName)
filter.appliedValues.forEach(function(test) {
console.log(test.value)
filtervalues_temp.push(test.value)
})
filtervalues.push(filtervalues_temp)
}
}
});
});
});
// console.log(filternames)
// console.log(filtervalues)
return resolve([filternames, filtervalues]);
})
}
getfilters().then(function ([filternames, filtervalues]) {
console.log("Function got over.")
console.log(filternames)
console.log(filtervalues)
})
目前,过滤器名称和过滤器值为空。我只想先处理数据,然后打印那些变量
【问题讨论】:
-
java != javascript
-
在
Promise.all()内尝试return
标签: javascript asynchronous promise