2017-01-28 28 views
0

在我的傳奇中,我調用了一個異步函數並將它傳遞給一個回調函數。我傳遞迴調的原因是因爲它可以從異步函數中調用幾次。Redux Saga - 在異步回調中調用「yield yield」

如何從異步函數內多次調用的回調函數中調用「yield put」。

回答

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已經完成了你最棘手的部分將被知道。它需要一些信號來表明它最後一次調用了回調函數。