Saya telah mengembangkan kode untuk mengambil informasi gambar suatu objek di dalam pernyataan loop. Namun, ketika saya mencetak output di bagian bawah loop, itu kosong. Adakah yang bisa membantu saya dengan ini, tolong? Fungsi getMediaInfo adalah panggilan Axios.

    const postsWithImageURLS = [];
    res.data.forEach(async (post) => {
        const response = await getMediaInfo(post.featured_media);
        postsWithImageURLS.push({...post, featured_url: response});
    });
    console.log(postsWithImageURLS);
0
user435245 12 Mei 2021, 16:11

2 jawaban

Jawaban Terbaik
 Promise.all(res.data.map(async (post) => {
    if (post.categories.includes(NEWS_CATEGORY_ID)) {
        const response = await getMediaInfo(post.featured_media);
        post = {...post, featured_url: response};
        return post;
    }
})).then(postsWithImageURLS => console.log(postsWithImageURLS));

Anda harus mengakses postsWithImageURLS setelah semua metode asinkron selesai.

2
辛忠柱 12 Mei 2021, 13:18

Saya tidak tahu persis konten fungsi getMediaInfo. Tetapi jika tidak mengembalikan janji, Anda tidak dapat menggunakan await sebelum memanggilnya.

Lihat ini:

const getMediaInfo = (data) => {
    return new Promise(async (resolve, reject) => {

        try {
            let response = await axios.get(data); // data must be a url ofc
            resolve(response); // Resolve must get a data you want to get when you call getMediaInfo
        } catch (error) {
            reject(error);
        }

    });
}

const postsWithImageURLS = [];
res.data.forEach(async (post) => {
    const response = await getMediaInfo(post.featured_media);
    postsWithImageURLS.push({...post, featured_url: response});
});
console.log(postsWithImageURLS);
0
Murat Colyaran 12 Mei 2021, 13:26