Если использовать async / await с axios.post, он становится бесконечным и игнорирует код ниже, но результат публикации успешен - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть приложение, которое загружает файл на сервер через axios.post и multer. Все идет хорошо, и загрузка файлов успешно, но когда я переключаю axios на async / await, он зависает, чтобы запустить M.toast или любой другой код после него.

Я пытался решить эту проблему, возвращая что-то с сервера, ноэто не помогло.

const handleUploadFile = async (e) => {
    const data = new FormData()

    data.append('file', e.target.files[0])
    data.append('name', 'Reservations file')
    data.append('description', 'This is a file with new reservations')

    try {
      // Problem 1 - if you use AWAIT for axios it will never launch code after it.
      await axios.post('/files/', data)
      M.toast({html: "Notification"}) // doesn't work with await, otherwise - ok
    } catch(err) {
      console.log(err)
    }
  }

Все идет так, как должно быть, до того момента, пока вы не переключите функцию на асинхронное / ожидание.

Server.js

const express = require('express')
const multer = require('multer')
const path = require('path')

const app = express()

app.use('/files', require('./routes/files'))

const PORT = process.env.PORT || 5000
app.listen(PORT, () => console.log(`Server started on port ${PORT}`))

маршруты / файлы.js

const express = require('express')
const router = express.Router()

const multer = require('multer')

const storage = multer.diskStorage({
    destination: './files/',
    filename(req, file, cb) {
      cb(null, `${new Date().toISOString().replace(/:/g, '-')}-${file.originalname}`);
    },
});

const upload = multer({ storage });

router.post('/', upload.single('file'), (req, res) => {
    console.log(res)
});

module.exports = router

1 Ответ

2 голосов
/ 07 ноября 2019

Если вы не хотите, чтобы ваш пользовательский интерфейс бесконечно ждал, вы должны вернуть ответ со стороны сервера, иначе он не перестанет его ждать. попробуйте это:

router.post('/', upload.single('file'), (req, res) => {
    return res.status(200).send({
        success: 'true',
        message: 'upload successful'
    })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...