Async: async/await와 ν•¨κ»˜ async.seriesλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

에 λ§Œλ“  2017λ…„ 11μ›” 04일  Β·  11μ½”λ©˜νŠΈ  Β·  좜처: caolan/async

async.series ν•¨μˆ˜ λ‚΄μ—μ„œ async awaitλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

λͺ‡ 가지 κ°„λ‹¨ν•œ μ‹€ν—˜μ„ ν–ˆμ§€λ§Œ μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

docs question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

미친 과학이 κ³„νšλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. πŸ˜‰

λͺ¨λ“  11 λŒ“κΈ€

그래 λ„Œ ν• μˆ˜μžˆμ–΄! κ·ΈλŸ¬λ‚˜ μ½œλ°±μ„ μ‚¬μš©ν•˜λŠ” λŒ€μ‹  값을 λ°˜ν™˜ν•˜κ±°λ‚˜ 였λ₯˜λ₯Ό λ˜μ§‘λ‹ˆλ‹€. http://caolan.github.io/async/global.html

μ’‹μ•„-λ‚΄κ°€ λ­”κ°€λ₯Ό μ˜€ν•΄ν•˜λ©΄ μš©μ„œ ν•΄μ£Όμ„Έμš” πŸ˜„ μ΄λ ‡κ²Œ?

    const result = await async.each(openFiles, async (file) => {
        try: {
            await asyncOperation(file);
            return null
        } catch(err) {
            return err
        }
    })

async ν•¨μˆ˜λŠ” μžλ™μœΌλ‘œ 였λ₯˜λ₯Ό κ±°λΆ€λ‘œ λ³€ν™˜ν•˜λ―€λ‘œ 였λ₯˜μ— λŒ€ν•΄ νŠΉλ³„ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€ μ•ŠμœΌλ €λŠ” 경우 예제λ₯Ό λ‹€μŒκ³Ό 같이 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

    const result = await async.each(openFiles, async (file) => {
        await asyncOperation(file);
    })

κ°œμ„ λœ μŠ€λ‹ˆνŽ«μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. κ°„λ‹¨ν•œ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ μž‘λ™ν•˜λŠ” 것 κ°™μ§€λ§Œ λ‹€μŒ μ„€μ •μ—μ„œλŠ” μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

for (const tasks of fileTasks) {
    const result = await async.each(tasks, async (file) => {
        await asyncOperation(file);
    })
}

λ‚˜λŠ” for-of 루프가 비동기 μž‘μ—…μ„ ν—ˆμš©ν•œλ‹€λŠ” 것을 μ΄ν•΄ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆκΉŒ?

async.each λŠ” Promiseλ₯Ό λ°˜ν™˜ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ await ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ•„ μ•Œμ•˜μ–΄. λ”°λΌμ„œ for-of async/await μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λŠ” 것은 asyncμ—μ„œ 쒋은 νŒ¨ν„΄μ΄ μ•„λ‹™λ‹ˆλ‹€. 이것이 비동기 λ‘œλ“œλ§΅μ— μžˆλ‹€λ©΄ μ§€κΈˆ ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

미친 과학이 κ³„νšλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. πŸ˜‰

λ˜λŠ” util.promisify() πŸ˜‰

(λ˜λŠ” pify() )

async.series 에 λŒ€ν•œ μ§ˆλ¬Έμ—μ„œ async.each 둜 μ΄λ™ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

const _async = require('async');
const _ = require('lodash');

public doSomething = async(num) : Promise<any> => {
     return num*num + 1;
} 

public async getResults() {
    let results = new Array<any>();
    let tasks = [];

    try {
      const list = [1,2,3,4,5,6,7,8,9,10];

      list.forEach((item) => {
        tasks.push((callback) => {
          this.doSomething(item.then(
            (res) => {
              results.push(res);
              callback(null, res);
            }
          );
        })
      })

      results = await new Promise((resolve) => {
        _async.series(tasks, (err, res) => {
          console.log(res);
          if (err) {
            results.push(err);
          }
          resolve(results);
        })
      });
    } catch (err) {
      results.push(err.message);
      console.log(err);
    }

    return _.join(results, '\r\n');
  }



@aearly Hey fen μ–΄λ–€ extracly 버전이 async/awaitλ₯Ό μ§€μ›ν•˜λŠ”μ§€ μ•Œλ €μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?
caolan/async 버전 2.6.0을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰