async function Unexpected identifier 오류 해결 방안

const qiniu = require('qiniu')
const nanoid = require('nanoid')
const config = require('../../config')

const bucket = config.qiniu.bucket
const mac = new qiniu.auth.digest.Mac(config.qiniu.AK, config.qiniu.SK)
const cfg = new qiniu.conf.Config()
const client = new qiniu.rs.BucketManager(mac, cfg)


function uploadToQiniu(url, key){
    return new Promise((resolve, reject) => {
        client.fetch(url, bucket, key, (err, ret, info) => {
            if(err) {
                reject(err)
            }else {
                if(info.statusCode === 200) {
                    resolve(ret)
                }else {
                    reject(info)
                }
            }
        })
    })
}

;(async () => {

   let movies = [{ 
            video: 'http://vt1.doubanio.com/201810051252/7a0e8fcb533b6d4c623aa24a48a6e301/view/movie/M/402330315.mp4',
            doubanId: 26752088,
            poster: 'https://img3.doubanio.com/view/photo/l_ratio_poster/public/p2519070834.jpg',
            cover: 'https://img1.doubanio.com/img/trailer/medium/2527050797.jpg' 
   }]

   movies.map(movie => {
        if(movie.video && !movie.key) {
            try {
                // 
                console.log(' video')
                const videoData = await uploadToQiniu(movie.video, videoId) // 

                console.log(' cover')
                const coverData = await uploadToQiniu(movie.cover, coverId)


                console.log(' poster')
                const posterData = await uploadToQiniu(movie.poster, posterId)
                if(videoData.key) {
                    movie.videoKey = videoData.key // key 
                }
                if(coverData.key) {
                    movie.coverKey = coverData.key 
                }
                if(posterData.key) {
                    movie.posterKey = posterData.key 
                }
                console.log(movie);
            }catch (err) {
                console.log(err);
            }
        }
   }) 
})()


아래와 같이 잘못 보고하다.
C:\Users\z\Desktop\imooc\movie-trailer\server\task\qiniu.js:41
                const videoData = await uploadToQiniu(movie.video, videoId)
                                        ^^^^^^^^^^^^^

SyntaxError: Unexpected identifier


mdn의 예를 찾아보았는데, 본 기기에서도 정상적으로 운행할 수 있다
function resolveAfter2Seconds() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('resolved');
    }, 2000);
  });
}

async function asyncCall() {
  console.log('calling');
  var result = await resolveAfter2Seconds();
  console.log(result);
  // expected output: 'resolved'
}

asyncCall();

찾은 원인은 다음과 같다. await는 async 함수에서만 사용할 수 있다. 여기는 await가 맵 함수에 전송된 매개 변수에서 실행되기 때문에 오류를 보고할 수 있다. 맵 방법을 for순환으로 바꾸면 된다.
더 좋은 방법은 맵 방법 안의 함수를 async 함수로 설명하는 것이다
 movies.map( async movie => {
     // code here
 })

좋은 웹페이지 즐겨찾기