2017-01-03 3 views
0

Это может показаться странным вопросом, но позвольте мне объяснить: У меня есть эта функция, которую я хочу превратить в обещание, потому что я считаю, что некоторые события не срабатывают полностью, а другие начинают раньше (например, состояние игроковOverallTotal ошибочно потому что я не думаю, что он принимает во внимание код выше, поэтому мне нужно ждать для того, чтобы закончить перед установкой состоянияКак начать обещание в JavaScript?

handleClickTwist() { 
    this.dealToPlayer(); 
    this.forceUpdate(); 
    let playersDeck = this.state.playersDeck; 
    let playersDeckTotal = []; 
    for (var i=0; i < playersDeck.length; i++){ 
     playersDeckTotal.push(playersDeck[i].rankValue) 
    } 

    let total = playersDeckTotal.reduce(function(a, b) { 
     return a + b; 
     }, 
    0); 

    this.setState({playersOverallTotal: total}); 
    this.total(); 
    }; 

Я знаю, что обещает выглядеть ниже

anotherFunc(){ 
    return new Promise((resolve, reject) => { 
     resolve() 
    } 
    } 

и тогда я могу c все что-то вроде этого:

this.func().then(() => { 
     return this.anotherFunc(); 
    }).then(() => { 
     return Promise.resolve(this.setState({playersOverallTotal: total})) 
    }).then(() => { 
     return this.anotherFun(); 

но я не могу подумать, как это сделать для этого кода. или, точнее, какова начальная функция, которую я могу вызвать в anotherFunc() до kick функция выключена?

+0

«что начальная функция я могу позвонить в anotherFunc() пнуть функцию выключения?» - Это будет «Обещание», которое вы уже звоните туда. – Quentin

+1

Я не вижу никаких асинхронных функций в вашем коде. Поэтому вам не нужно обещать. Если либо 'dealToPlayer()', либо 'forceUpdate()' являются асинхронными, то они должны либо принять обратный вызов, либо возвратить обещание. Ваша проблема не в функции 'handleClickTwist()' – slebetman

+0

По умолчанию код javascript ожидает завершения предыдущего кода перед продолжением. Посылы и обратные вызовы позволяют вам что-то делать, пока выполняется какой-то внешний процесс, например: загрузка изображения или json-файла. В вашем коде я не вижу никакого внешнего процесса, поэтому ваша ошибка, скорее всего, просто ошибка программирования. Это зависит от того, что делают ваши другие функции (dealToPlayer(), forceUpdate() и т. Д.) – Kokodoko

ответ

2

Может быть, вам не хватает какой-то общее понимание:

Во-первых, я не вижу каких-либо возможных проблем с кодом, которые могут быть решены с помощью обещаний, но каким-либо образом, как в вашем примере:

anotherFunc(){ 
    return new Promise((resolve, reject) => { 

     // do some crazy stuff here 
     // if you do an ajax call put "resolve" 
     // into success function after ajax is finished 

     if(allIsFine) { 
     resolve(passAnyData); 
     } else { reject() }; 
    } 
    } 

тогда вызов

anotherFunc().then(function(passAnyData) { 
// resolve called with passAnyData 


}).catch(function() { 
// some error 
}); 
+0

ОК уверен. позвольте мне сказать следующее: 'let total = playersDeckTotal.reduce (функция (a, b) { return a + b; }, 0); console.log (playersDeckTotal, 'deck'); console.log (всего, 't0t1'); // регистрирует 19 как ожидалось this.setState ({playersOverallTotal: total}); console.log (this.state.playersOverallTotal, 'tot'); '// logs 14, потому что он уменьшает конечный номер. Зачем это делать? –

+0

ОК решил, мне нужен тайм-аут. будет отмечать ваши как правильные, хотя –

Смежные вопросы