Вы не отвечаете на повторный вызов
const request1 = async () => {
try {
const data = await rp.get(link, options)
return data
} catch (err) {
return await request1(); // i'm not sure if you need await here or not, worth testing
}
}
Если вы не возвращаетесь с повторного вызова, то то, что вы делаете, по сути идентично этому
const request1 = async () => {
try {
const data = await rp.get(link, options)
return data
} catch (err) {
request1(); // this does request 1 WITHOUT waiting for a result
}
return undefined;
}
Редактировать: это первый игрушечный пример того, что происходит, если вы ничего не возвращаете
const rp = {
get: async function() {
await new Promise(r => setTimeout(r, 250));
this.count++;
if (this.count % 2 === 0) {
return this.count;
} else {
throw new Error('error: even')
}
},
count: 0
};
const request1 = async () => {
try {
const data = await rp.get();
console.log('data in request1', data);
return data
} catch (err) {
request1();
}
};
const request2 = async (data) => {
try {
const data = await rp.get();
console.log('data in request2', data);
return data
} catch (err) {
request2();
}
};
const getData = async() => {
console.log('starting request 1');
await request1();
console.log('starting request 2');
await request2()
};
getData();
И вот что происходит, когда вы возвращаетесь:
const rp = {
get: async function() {
await new Promise(r => setTimeout(r, 250));
this.count++;
if (this.count % 2 === 0) {
return this.count;
} else {
throw new Error('error: even')
}
},
count: 0
};
const request1 = async () => {
try {
const data = await rp.get();
console.log('data in request1', data);
return data
} catch (err) {
return request1();
}
};
const request2 = async (data) => {
try {
const data = await rp.get();
console.log('data in request2', data);
return data
} catch (err) {
return request2();
}
};
const getData = async() => {
console.log('starting request 1');
await request1();
console.log('starting request 2');
await request2()
};
getData();
В первом примере вы заметите, что request2 запускается до того, как request1 регистрирует свои данные, но во втором примере, с операторами return, request2 не запускается до тех пор, пока request1 получает данные.