Как дождаться загрузки изображения перед выполнением остальной части кода - PullRequest
1 голос
/ 06 мая 2020

Надеюсь, у вас все в порядке, поэтому я уже какое-то время использую nodejs и все еще привыкаю к ​​асинхронным функциям и прочему, поэтому я загружаю изображение с сервера, используя ax ios, и дождитесь загрузки изображения, а затем используйте изображение, чтобы опубликовать sh сообщение на веб-сайте WordPress, код довольно сложен, потому что он работает с несколькими сообщениями, но другие просто не будут ждать загрузки изображения полностью, однако он просто отправляет сообщение без изображения.

axios.get(encodeURI(img), {responseType: "stream"} )  
                                .then(response => {  
                                // Saving file to working directory  
                                    response.data.pipe(fs.createWriteStream("images/"+title.replace(/[^\x00-\x7F]/g, "")+".png"));
                                    await sleep(3000);
                                    var wp = new WPAPI({
                                        endpoint: 'XXXXX/wp-json',
                                        // This assumes you are using basic auth, as described further below
                                        username: 'XXXX',
                                        password: 'XXXXX'
                                    });
                                    wp.posts().create({
                                        title: title,
                                        content: index,
                                        categories: [3,9,2],
                                        status: 'publish'
                                      }).then(function( post ) {

                                        // Create the media record & upload your image file
                                        var filePath = "images/"+title.replace(/[^\x00-\x7F]/g, "")+".png";
                                        return wp.media().file( filePath ).create({
                                          title: title,
                                          // This property associates our new media record with our new post:
                                          post: post.id
                                        }).then(function( media ) {
                                          console.log( 'Media uploaded with ID #' + media.id );
                                          return wp.posts().id( post.id ).update({
                                            featured_media: media.id
                                          });                           
                                        });

                                      });
                                })  
                                    .catch(error => {  
                                    console.log(error);  
                                });  

Итак, я спрашиваю, как я могу полностью подождать, пока изображение не появится в папке, прежде чем поделиться сообщением, спасибо.

1 Ответ

1 голос
/ 06 мая 2020

Вместо

response.data.pipe(fs.createWriteStream("images/"+title.replace(/[^\x00-\x7F]/g, "")+".png"));

await sleep(3000);

Используйте

response.data.pipe(fs.createWriteStream("images/"+title.replace(/[^\x00-\x7F]/g, "")+".png"))
 .on('error', () => {
    // log error and process 
  })
  .on('finish', () => {
    // publish a post with image on a wordpress website,
  });

PS: попробуйте сделать модульный код,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...