Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

88
Views
Promesas dinámicas de JavaScript

Estoy tratando de entender cómo funcionan las promesas en JS jugando con swapi.dev . Me gustaría crear una cadena dinámica de promesas (sin usar async/await) pero no me da ningún resultado. En particular, la idea detrás es obtener todos los nombres de la persona dada (por ejemplo, Luke Skywalker) y volcarlos en la consola.

¿Alguien podría ayudarme? ¿Qué me estoy perdiendo?

Gracias por adelantado.

 "use strict"; const request = require("request-promise"); const BASE_URL = "http://swapi.dev/api"; var currentPromise = Promise.resolve(); callApiPromise(`${BASE_URL}/people/1`).then((data) => { console.log("Getting vehicles' URLs"); const vehicles_URL = data["vehicles"]; console.log("Starting looping through URLs"); for (let i = 0; i < vehicles_URL.length; i++) { console.log(`i=${i}, vehicle_URL=${vehicles_URL[i]}`); currentPromise = currentPromise.then(function () { console.log(".. getting vehicle name"); return getVehicleName[vehicles_URL[i]]; }); } }); function getVehicleName(url) { callApiPromise(url).then((vehicle_data) => { var arrVehicleData = new Array(); arrVehicleData.push(vehicle_data); console.log(arrVehicleData.map((vehicle) => vehicle.name)); }); } function callApiPromise(url) { return new Promise((resolve, reject) => { callApi(url, (err, data) => { if (err) { reject(err); return; } resolve(data); }); }); } function callApi(url, callback) { request .get(url) .then((response) => { const json = JSON.parse(response); callback(null, json); }) .catch((err) => { callback(err, null); }); }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Algunos asuntos:

  • Falta una declaración de return en getVehicleName
  • Un problema de sintaxis en getVehicleName[vehicles_URL[i]] (debe estar entre paréntesis)
  • Como las promesas para obtener los nombres de los vehículos son independientes, no las encadenaría, sino que usaría Promise.all
  • arrVehicleData siempre tendrá un solo elemento. No hay razón para una matriz allí donde se usa.

También está tomando el enfoque incorrecto al usar request.get . La función inferior convierte esa API de Promise-API a una API de devolución de llamada, solo para hacer lo contrario (de devolución de llamada a promesa) en la función justo encima de ella. Simplemente debe omitir la capa de devolución de llamada y atenerse a las promesas:

 "use strict"; const request = require("request-promise"); const BASE_URL = "http://swapi.dev/api"; getJson(`${BASE_URL}/people/1`).then(data => { return Promise.all(data.vehicles.map(getVehicleName)); }).then(vehicleNames => { console.log(vehicleNames); // Continue here... }); function getVehicleName(url) { return getJson(url).then(vehicle => vehicle.name); } function getJson(url, callback) { return request.get(url).then(JSON.parse); }

Finalmente, ya no debe usar request-promise ya que el módulo de solicitud, del cual depende request-promise, ha quedado obsoleto .

about 4 years ago · Juan Pablo Isaza Report

0

getVehicleName no devuelve una promesa. En su lugar, invoca una promesa de que para cuando se resuelva, el bucle for que lo invoca ya se eliminará de la pila de llamadas.

Este es un ejemplo de encadenamiento de promesas:

 const promise = new Promise(resolve => resolve(1)) const promise1 = Promise.resolve(2) const methodReturnPromise = () => new Promise(resolve => resolve(3)) promise.then(firstPromiseData => { // do something with firstPromiseData console.log(firstPromiseData) return promise1 }).then(secondPromiseData => { // do something with secondPromiseData console.log(secondPromiseData) return methodReturnPromise() }).then(thirdPromiseData => { // do something with thirdPromiseData console.log(thirdPromiseData) })
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!