Esto debería ser simple, pero no tiene sentido para mí. Es una simple sección de una cadena de promesa.
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 })La consola muestra la matriz de nombre de vuelo correctamente, pero nombre de vuelo.longitud siempre se consola como 0, aunque console.log(nombre de vuelo) pone longitud:2 como salida
¿¿¿Por qué??? Necesito trabajar con cada elemento de la matriz, pero no se reconoce correctamente.
La recomendación de @derpircher funcionó:
No está esperando las promesas en su ciclo
for(var a = 0; a < values.length; a++). Por lo tanto, cuandoreturn flightNameel nombre del vuelo, la matriz aún está vacía y, por lo tantoconsole.log(flightName.length)imprime0. La salida deconsole.log(flightName)puede pretender queflightNamecontiene valores, pero en realidad no es así porqueconsole.loghace referencia al objeto, que luego se completa cuando se resuelven las promesas. Hazconsole.log(JSON.stringify(flightName))y verás que se imprime solo[]porque en ese momento, la matriz todavía está vacíaPara resolver ese problema, haga que el primero
thenel controlador seanasyncy useawait Xrm.WebApi...o envuélvalo correctamente en unPromise.all