javascript - 数组长度未报告
问题描述
这应该很简单,但对我来说没有意义。它是 Promise 链的一个简单部分
let flightName = [];
let guidArr = [];
Promise.all(guidArr)
.then(values => {
for(var a = 0; a < values.length; a++) {
Xrm.WebApi
.online
.retrieveRecord("crd80_flightplanevent", values[a], "?$select=_crd80_learnerflight_value")
.then(
function success(result) {
flightName.push(result["_crd80_learnerflight_value@OData.Community.Display.V1.FormattedValue"])
},
function(error) {
DisplayError(error)
});
}
return flightName
}).then(flightName => {
console.log(flightName)
console.log(flightName.length)
return flightName
})
控制台正确显示了 flightName 数组,但 flightName.length 始终被控制台为 0,即使 console.log(flightName) 将 length:2 作为输出
为什么???我需要处理数组中的每个项目,但无法正确识别
解决方案
@derpircher的建议奏效了:
您不是在等待
for(var a = 0; a < values.length; a++)
循环中的承诺。因此,当您这样做时return flightName
,数组仍然是空的,因此会console.log(flightName.length)
打印0
. 的输出console.log(flightName)
可能会假装flightName
包含值,但实际上它并不包含值,因为它console.log
引用了对象,该对象稍后在 promise 解决时被填充。这样做console.log(JSON.stringify(flightName))
,你会看到它打印出来只是[]
因为在那一刻,数组仍然是空的要解决该问题,请制作第一个
then
处理程序async
并使用await Xrm.WebApi...
或正确地将整个东西包装在一个Promise.all
推荐阅读
- python - 为什么我需要使用静态文件夹来显示带有flask的图像
- node.js - 如何从 get 方法中的 cors 禁用选项方法
- python - 使用 Symfit 进行全局拟合:数据集的类型结构
- kotlin - Kotlin-Native cinterop 从 C 更新 Struc 字段
- scala - AnalysisException:在数据架构中发现重复的列:`hour`、`eventTime`
- clickhouse - 将具有动态更改架构的事件数据流式传输到 ClickHouse
- laravel - laravel 无法访问关系属性
- python - Python多处理函数卡在一个带有while循环的函数中
- java - Android 照片上的 EXIF 方向字段为空
- angular - Angular 表单在使用 ng-zorro 初始化时未显示错误