When I’ve created files I want to save links. But if I request files immediately, I don’t have urls in the response. But if I use setTimeut, I get them!!!
There’s the code:
const createFiles = async (files, stagedTargets, graphql) => {
const response = await graphql(`
mutation fileCreate($files: [FileCreateInput!]!) {
fileCreate(files: $files) {
files {
fileErrors {
code
details
message
}
... on MediaImage {
id
}
... on GenericFile {
id
}
... on Video {
id
}
}
userErrors {
field
message
}
}
}
`, {
variables: {
files: prepareFilesToCreate(stagedTargets, files),
}
});
const result = await response.json();
return {
response: result,
errors: result.data.fileCreate.userErrors,
}
}
const getFilesByIds = async (files, graphql) => {
try {
const response = await graphql(`
query ($ids: [ID!]!) {
nodes(ids: $ids) {
__typename
... on GenericFile {
id
url
fileErrors {
code
details
message
}
}
... on MediaImage {
id
fileErrors {
code
details
message
}
image {
url
}
}
}
}
`, {
variables: {
ids: files.map((file) => file.id),
}
});
const result = await response.json();
return {
response: result.data.nodes,
errors: result.errors,
}
} catch (e) {
return {
errors: [e?.message || 'Files getting error']
}
}
}
it doesn’t work:
const newFiles = await getFilesByIds(createFilesResponse.data.fileCreate.files, graphql);
console.log('newFiles', newFiles.response);
console.log('newFiles2', newFiles.response.map((file) => file.image));
console.log('errors', newFiles.errors);
But it works:
setTimeout(async () => {
const newFiles = await getFilesByIds(createFilesResponse.data.fileCreate.files, graphql);
console.log('newFiles', newFiles.response);
console.log('newFiles2', newFiles.response.map((file) => file.image));
console.log('errors', newFiles.errors);
}, 5000)
I guess createdFiles shoud set links before request, not after…

