2017-01-28 4 views
0

Внутри моей саги я вызываю функцию асинхронного вызова и передаю ее обратный вызов. Причина, по которой я передаю ему обратный вызов, состоит в том, что его можно вызвать несколько раз из функции async.Redux Saga - вызов «yield put» внутри асинхронного обратного вызова

Как я могу назвать «yield put» внутри обратного вызова, который должен вызываться более одного раза изнутри функции async.

ответ

1

Как вы заметили, нет никакой возможности для yield внутри вложенной функции вашей функции генератора. Вместо этого вы можете преобразовать функцию async стиля обратного вызова в обещание и использовать 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 завершена. Это потребует некоторого способа сообщить, что он вызвал функцию обратного вызова в последний раз.