2017-01-28 11 views
0

私のサガの中で、私は非同期関数を呼び出してコールバックを渡しています。コールバックを渡す理由は、async関数から数回呼び出すことができるからです。Redux Saga - 非同期コールバック内で "yield put"を呼び出す

コールバック内でyield関数を呼び出すには、async関数の中から複数回呼び出す必要があります。

答えて

1

気付いたように、yieldはジェネレータ関数のネストされた関数の中にありません。代わりに、コールバックスタイルの非同期関数を約束に変換し、call effectを使用することができます。

function* generator() { 
    const results = yield call(function() { 
    return new Promise(function(resolve, reject) { 
     const results = []; 
     asyncFunction(function(result) { 
     if (async function is done) { resolve(results) } 
     else { results.push(result) } 
     }); 
    }); 
    }); 
    yield put(action(results)); 
} 

これは一般的なパターンですが、asyncFunctionが完了したときにわかりやすい部分があります。前回のコールバック関数を呼び出したことを通知するには、何らかの方法が必要です。

関連する問題