2017-12-27 2 views
2

다음 코드가 있습니다. 나는 출력을 기대 : START, 중동, 중동, ENDNodeJs - 비동기/비동기/기다리기

대신 나는 중동이 시작, 중간, 끝을 얻을

console.log("START"); 
await Promise.all(prices.map(async(price) => { 
    let obj: any = {};  
    obj.normal = price.normal; 

    await new Transport(obj).save(async (err: any, doc: any) => { 
    console.log("Middle"); 
    price.transport_id = doc._id; 
    }); 
})); 

console.log("END"); 
console.log(prices); 

답변

3

(참고 가격 배열 내 예제에서이 개 값이) 내부 awaitreturn 문으로 변경하십시오. 그렇지 않은 경우 prices.map()은 약속 대신 undefined 인 항목 배열을 생성합니다.

Transport#save()은 약속을 반환하지 않으므로 Promise 생성자로 포장해야합니다. 콜백 스타일 API이거나 약속을 반환하는 방법을 설명하는 문서를 참조하십시오.

그것을 포장 , 당신이 뭔가를 할 수 있습니다 :

// ... 
obj.normal = price.normal; 

return new Promise((resolve, reject) => { 
    new Transport(obj).save((err: any, doc: any) => { 
    console.log('Middle'); 

    if (err) return reject(err); 

    price.transport_id = doc._id; 
    resolve(price); 
    }); 
}); 
+0

여전히 같은 출력 .... 난 당신이 말한대로 "새로운 운송을 반환하는"새로운 운송 (OBJ)를 기다리고 있습니다 "변경 (OBJ) " – Michalis

+0

'Transport # save()'는 약속을 반환하지 않습니다.이 경우 콜백 스타일의 API이기 때문에'Promise' 생성자로 포장해야합니다. 또는 문서를 참조하십시오 아마 약속을 되 찾는 방법을 설명 할 수 있습니다. –

+0

맞아 ... 약속을 되풀이하지 않아. 나는 그것을 약속으로 포장하고 이제는 훌륭하게 작동합니다. 감사 – Michalis