javascript - hacer - Encuestar por un resultado n veces(con demoras entre intentos) antes de fallar
como hacer un examen en javascript (1)
No. ¡Esta es la versión async / await del antipattern del constructor Promise
! Ni siquiera detiene el ciclo cuando llama a resolve
, o rechaza cuando se lanza una excepción (por ejemplo, cuando res
es null
).
Deberías usar
async function getResult() {
for (let counter = 0; counter < 10; counter += 1) {
await Bluebird.delay(1000);
const res = await apiCall();
if (res.data) {
return res.data;
}
}
throw new Error(''timeout'');
}
Si quieres asegurarte de que se devuelve una promesa de Bluebird, no una nativa, envuélvela en Bluebird.method
o dile a tu transpiler que use Bluebird.
Necesitamos escribir una función Node.js que sondee un punto final determinado API para un resultado de un cálculo previamente solicitado. El resultado requiere un tiempo aleatorio para generarse y puede que no se genere en absoluto. Nos gustaría obtenerlo lo antes posible, pero también no quiero esperar demasiado, lo que significa que después de un cierto número de llamadas a la API nos gustaría que la función fallara (rechazar una Promesa).
Hay una forma de comunicación entre nuestro código y la API.
const Bluebird = require(''bluebird'');
function getResult() {
return new Bluebird(async function (resolve, reject) {
let counter = 0;
while (counter < 10) {
await Bluebird.delay(1000);
const res = await apiCall();
if (res.data) {
resolve(res.data);
} else {
counter += 1;
}
}
reject(''timeout'');
});
}
¿Es este el enfoque correcto?