Referencia API: multiGetObjects
Obtiene detalles de muchos objetos en una única solicitud de red.
Clase: SuiClient
Tipo de método: Operación de lectura, sin gas
Resumen
Utilizar multiGetObjects resulta mucho más eficiente que llamar a getObject en un bucle. Reduce la latencia de la red combinando muchas consultas en una única llamada a procedimiento remoto (RPC).
Firma
client.multiGetObjects(input: MultiGetObjectsParams): Promise<SuiObjectResponse[]>
Parámetros
El método acepta un objeto de configuración con las siguientes propiedades:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
ids | string[] | Sí | Una matriz de IDs de objetos hexadecimales de 32 bytes. |
options | SuiObjectDataOptions | No | Banderas de configuración para activar campos de datos específicos. Se aplica a todos los objetos solicitados. |
Límite: La mayoría de los nodos RPC públicos imponen un límite de 50 IDs por petición. Para lotes más grandes, debes dividir tu array en trozos.
Valor de retorno
Devuelve un Promise que resuelve a un array de objetos SuiObjectResponse.
El orden del array corresponde exactamente al orden de los ids pasados en la petición.
[
{
"data": { "objectId": "0xA...", "version": "1", ... }
},
{
"error": { "code": "notExists", "object_id": "0xB..." }
},
{
"data": { "objectId": "0xC...", "version": "5", ... }
}
]
Ejemplos de uso
Escenario A: Obtención masiva de metadatos
Imagine que tiene una lista de identificadores de Tokens No Fungibles (NFT) y necesita mostrar sus nombres.
const objectIds = ['0x123...', '0x456...', '0x789...'];
const results = await client.multiGetObjects({
ids: objectIds,
options: {
showContent: true,
showDisplay: true
}
});
// Procesar los resultados
results.forEach((result) => {
if (result.data) {
console.log("Elemento encontrado:", result.data.display?.data?.name);
} else {
console.warn("El elemento no se pudo cargar:", result.error);
}
});
Escenario B: Manejando listas grandes por fragmentación
Dado que se aplica un límite de, por ejemplo, 50 elementos por petición, utilice un ayudante de fragmentación para listas grandes.
import { chunk } from 'lodash'; // o tu propio ayudante
const allIds = [/* ... array de 200 IDs ... */];
const CHUNK_SIZE = 50;
const chunks = chunk(allIds, CHUNK_SIZE);
for (const batch of chunks) {
const batchResults = await client.multiGetObjects({
ids: batch,
options: { showType: true }
});
// Procesar batchResults...
}
Mejores prácticas
1. Maneje siempre los fallos parciales
A diferencia de una consulta de base de datos estándar que podría detener todo el lote en caso de error, multiGetObjects devuelve un resultado para cada ID. Incluso si elimina un objeto ( ***** ), los demás seguirán devolviendo resultados satisfactorios ( **** ). Debe comprobar data vs error para cada elemento en el array devuelto.
2. Conservación del orden
El SDK garantiza que el array de salida coincide con el índice del array de entrada.
results[0]corresponde aids[0].results[1]corresponde aids[1].
Puedes confiar en esto para mapear los resultados de vuelta a tu fuente de datos original.