Я довольно новичок в js и мире обещаний, и я прочитал много статей об обещании, обратном вызове, асинхронности / ожидании.
У меня есть функция getAllPost()
, которая запрашивает все сообщения из URI.
// get-content.js
export async function getAllPost(){
let uri = "http://127.0.0.1/posts";
let request = axios.get(uri);
return request;
}
export default getAllPost;
Я пытаюсь использовать результат из getAllPost()
для отображения содержимого, и я хочу экспортировать posts
.
// posts.js
import * as Navi from 'navi'
import slugify from 'slugify'
import { getAllPost } from './get-content'
let getPost = getAllPost();
let articles;
getPost.then((response) => {
articles = response;
})
console.log(articles); // undefined.
let postDetails = articles.map( content => {
let title = content.title;
let slug = slugify(content.title);
let date = new Date(content.date);
let contentKey = content.contentKey;
return {contentKey, title, slug, date}
})
let posts = postDetails.map(
({contentKey, title, slug, date}, i) =>
({
getPage: Navi.map(async () => {
return Navi.route({
title,
getData: (req, context) => ({
date,
slug,
}),
getView: async () => {
let MDXComponent = await getContent(contentKey);
return { MDXComponent }
}
})
}),
slug,
})
)
export default posts;
Я понимаю, что articles
равен undefined
, потому что js не будет ждать getPost.then()
fini sh.
Я пытался поместить все let postDetails = articles.map(...)
и let posts = postDetails.map(...)
в getPost.then((response) => { ... })
блок, но в этом случае я не могу экспортировать posts
.
getPost.then((response) => {
let articles = response;
let postDetails = articles.map( content => {
...
})
let posts = postDetails.map(
...
)
export default posts; // compile failed.
})
Редактировать:
Спасибо за предложения, но я должен быть более ясным.
Вот как я буду использовать сообщения:
import { chunk, fromPairs } from 'lodash'
import posts from './posts'
// posts has to be an array at this point.
let chunks = chunk(posts, n)
Я думаю, мне нужно переписать chunk()
разрешить обратный вызов?
https://github.com/lodash/lodash/blob/master/chunk.js