Estoy haciendo solicitudes POST a una API y quiero hacer tres solicitudes lo más eficientes y con menos código posible. Actualmente mi código funciona, pero envía solo el primer objeto, en lugar de los tres, ¿cuál es la forma más eficiente de realizar tres llamadas a la API? Aquí está mi intento hasta ahora:
import fetch from 'node-fetch'; import xlsx from 'xlsx'; const baseUrl = ""; const apiToken = ""; const wb = xlsx.readFile('users.xlsx'); const ws = wb.Sheets['users']; const data = xlsx.utils.sheet_to_json(ws); let [obj1, obj2, obj3] = data const optionsForFirstUser = { method: "POST", headers: { Authorization: `Bearer ${apiToken}`, "gtmhub-accountid": accountId, "Content-type": "application/json; charset=UTF-8", Accept: "application/json, text/plain, */*", }, body: JSON.stringify( obj1 ), }; const optionsForSecondUser = { method: "POST", headers: { Authorization: `Bearer ${apiToken}`, "gtmhub-accountid": accountId, "Content-type": "application/json; charset=UTF-8", Accept: "application/json, text/plain, */*", }, body: JSON.stringify( obj1 ), }; const optionsForThirdUser = { method: "POST", headers: { Authorization: `Bearer ${apiToken}`, "gtmhub-accountid": accountId, "Content-type": "application/json; charset=UTF-8", Accept: "application/json, text/plain, */*", }, body: JSON.stringify( obj1 ), }; const createUser = (url, settings) => { return fetch(`${url}/users`, settings) .then((response) => response.text()) .then((data) => console.log(data)) .catch((error) => { console.log(error.message); }); }; createUser(baseUrl, optionsForFirstUser, optionsForSecondUser, optionsForThirdUser);No puedo usar una matriz porque la API no lo permite. Deben ser solo objetos JSON.
Aquí hay un ejemplo de trabajo que envía múltiples solicitudes POST a una API de Postman de prueba :
const fetch = require("node-fetch"); const baseUrl = "https://postman-echo.com/post"; const obj1 = { id: 1, name: "one" }; const obj2 = { id: 2, name: "two" }; const obj3 = { id: 3, name: "three" }; const options1 = { method: "POST", headers: { "Content-type": "application/json; charset=UTF-8", Accept: "application/json, text/plain, */*", }, body: JSON.stringify(obj1), }; const options2 = { method: "POST", headers: { "Content-type": "application/json; charset=UTF-8", Accept: "application/json, text/plain, */*", }, body: JSON.stringify(obj2), }; const options3 = { method: "POST", headers: { "Content-type": "application/json; charset=UTF-8", Accept: "application/json, text/plain, */*", }, body: JSON.stringify(obj3), }; const createUser = (url, options) => { return options.map((option) => fetch(url, option)); }; (async () => { const promises = createUser(baseUrl, [options1, options2, options3]); try { const rc = await Promise.all(promises); console.log(rc); } catch (e) { console.log("Caught error: ", e); } })();