Вызов функции генератора внутри setInterval () - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь вызвать функцию генератора внутри setInterval() метода. Цель этого кода заключается в том, что он будет периодически запрашивать у определенного сервера некоторые данные, пока не получит ненулевой ответ. После получения ответа он вызовет storeAddress(), который является функцией генератора, определенной в том же файле. Приведенный ниже код дает мне такую ​​ошибку:

SyntaxError: yield является зарезервированным словом (248: 6)

ПРИМЕЧАНИЕ : Я использую реактивный шаблон для создания своего приложения. Насколько я могу судить по поиску в Интернете, Babel выдает эту ошибку.

  • Я пытался const query = yeild call (setInterval, function(){magic code}, 10000). Это не дает ошибку, но magic code никогда не выполняется.

  • Я пробовал const query = setInterval(function* () {magic code}, 10000) с тем же эффектом, что и выше.

  • Я пробовал const query = setInterval(yield call(function(){magic code}, 10000) с тем же эффектом, что и выше.

  • Я пробовал const query = yield call (setInterval, function(){magic code}, 10000) с тем же эффектом, что и выше.

  • Я пробовал storeAddress(action.payload, balance).next() внутри setInterval(). Элемент управления работает внутри storeAddress(), но внутри этой функции также есть вызовы генератора, которые никогда не вызываются. Фактически в этом случае ничего не выполняется после первого вызова генератора внутри storeAddress().

    function* callSaveNewAddress(action){
      const selectedNetwork = yield select(selectNetworkId());
      let count = 1;
      let balance = 0;
      const query = setInterval(function () {
        getAddressBalance(action.payload, selectedNetwork).then(res => 
        {return balance = res.data.mempool_balance});
    
        if(balance > 0) {
           yield call (storeAddress, action.payload, balance);
           clearInterval(query);
        } else if(count == 90) {
           clearInterval(query);
           console.log("Nothing received in 15 minutes");
        }
      }, 10000);
    }
    

Итак, как мне вызвать storeAddress(), который является функцией генератора, внутри обычной функции, такой как setInterval()?

1 Ответ

0 голосов
/ 15 января 2019
const query= function * () {
  const runner = yield call(setInterval, () => {
    getAddressBalance(action.payload, selectedNetwork).then(res => 
    {return balance = res.data.mempool_balance});

    if(balance > 0) {
       yield call (storeAddress, action.payload, balance);
       clearInterval(query);
    } else if(count == 90) {
       clearInterval(query);
       console.log("Nothing received in 15 minutes");
    }
  }, 1000);
}

попытайтесь использовать setInterval в вызове, передавая через параметры функцию, которую вы хотите выполнить в нем.

...