Пример источника WordPress определен как async
:
exports.createPages = async ({ graphql, actions }) => {
... поэтому вы уже можете использовать await
для загрузки вашего файла (-ов) сразу после запроса данных (и до * 1006) * вызов). Это должно быть (НЕ ПРОВЕРЕНО) так же просто, как:
// Check for any errors
if (result.errors) {
console.error(result.errors)
}
// Access query results via object destructuring
const { allWordpressPage, allWordpressPost } = result.data
const pageTemplate = path.resolve(`./src/templates/page.js`)
allWordpressPage.edges.forEach(edge => {
// for one file per edge
// url taken/constructed from some edge property
await downloadImage (url);
createPage({
Конечно, для нескольких файлов вы должны использовать Promise.all
, чтобы дождаться [разрешения] всех загрузок [возвращенного обещания] перед созданием страницы:
allWordpressPage.edges.forEach(edge => {
// for multiple files per edge(page)
// url taken/constructed from some edge properties in a loop
// adapth 'paths' of iterable (edge.xxx.yyy...)
// and/or downloadImage(image) argument, f.e. 'image.someUrl'
await Promise.all(
edge.node.someImageArrayNode.map( image => { return downloadImage(image); }
);
createPage({
Если вам нужно передать / обновить узлы изображения (для использования компонентов), вы должны иметь возможность изменять узлы, например:
await Promise.all(
edge.node.someImageArrayNode.map( image => {
image["fullUrl"] = `/publicPath/${image.url}`;
return downloadImage(image.url); // return Promise at the end
}
);
createPage({
path: slugify(item.name),
component: ItemView,
context: {
content: item,
title: item.name,
firstImageUrl: edge.node.someImageArrayNode[0].fullUrl,
images: edge.node.someImageArrayNode