async function Unexpected identifier 오류 해결 방안
3045 단어 구덩이를 밟아서 한데 모으다
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
})