Async: Bisakah Anda menggunakan async.series dengan async/menunggu?

Dibuat pada 4 Nov 2017  ·  11Komentar  ·  Sumber: caolan/async

Bisakah Anda menggunakan async menunggu di dalam fungsi async.series?

Saya melakukan beberapa eksperimen sederhana, tetapi tidak bekerja seperti yang diharapkan.

docs question

Komentar yang paling membantu

Ada beberapa ilmu gila yang direncanakan. 😉

Semua 11 komentar

Ya kamu bisa! Tetapi alih-alih menggunakan panggilan balik, cukup kembalikan nilai atau lempar kesalahan. http://caolan.github.io/async/global.html

Ok - tolong maafkan saya Jika saya salah mengerti sesuatu Seperti ini?

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

Karena fungsi async secara otomatis mengubah kesalahan menjadi penolakan, kecuali jika Anda ingin melakukan sesuatu yang khusus dengan kesalahan tersebut, contoh Anda dapat dikurangi menjadi:

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

Terima kasih atas cuplikan yang ditingkatkan. Tampaknya berfungsi dalam skenario sederhana, tetapi dalam pengaturan berikut saya tidak dapat membuatnya berfungsi:

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

Saya memahami bahwa for-of loop akan memungkinkan operasi asinkron?

Karena async.each tidak mengembalikan Janji, Anda tidak dapat await itu.

Ahh ok. Jadi menggunakan opsi for-of async/await bukanlah pola yang baik dengan async. Apakah Anda sekarang jika ini ada di peta jalan untuk async?

Ada beberapa ilmu gila yang direncanakan. 😉

Atau util.promisify()

(atau pify() )

Mengapa ini berubah dari pertanyaan tentang async.series menjadi 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 Hai fen, bisakah Anda memberi tahu saya versi ekstrak mana yang mendukung async/menunggu?
Saya menggunakan caolan/async versi 2.6.0

Apakah halaman ini membantu?
0 / 5 - 0 peringkat