2015-09-29 3 views
2

Языки: Reactjs и ваниль JavaScriptJavaScript - Добавление параметра к успеху обратного вызова

Вопрос, скорее всего вообще JavaScript обратного вызова вопрос в, но я добавлю мой Реагировать код, чтобы показать, как я оказался в это затруднительное положение.

Давайте посмотрим, Тарантино стиль, на мой запутанным промаха:

Я пытаюсь отправить обратного вызова в качестве параметра успех обратного вызова

navigator.geolocation.getCurrentPosition(success(dataLoaded), error, options); 

но это не нравится, потому что «pos» - это «единственный входной параметр» для обратного вызова успеха в соответствии с docs.

Теперь давайте перемотку и выяснить, что у меня в этот беспорядок:

Я использую функцию обратного вызова, как способ дать мое приложение Реагировать недурно, что асинхронная выборка делается и сделать себя.

onDataLoaded: function() { 
    this.setState({ 
     postsLoaded: true, 
    }); 
    }, 
    componentDidMount: function(){ 
    WebAPIUtils.fetchComponentData(this.onDataLoaded); 
    }, 
render: function() { 
    if(!this.state.postsLoaded){ 
     return (<div className="Loading">Loading...</div>); 
    } 
    return (
     <div> 
     //Components can be rendered now since their data is loaded. 
     </div> 
    ); 
    } 

После того, как код ниже успешен мне нужно выполнить эту функцию обратного вызова:

var options = { 
    enableHighAccuracy: true, 
    timeout: 5000, 
    maximumAge: 0 
}; 

function success(pos) { 
    var crd = pos.coords; 

    console.log('Your current position is:'); 
    console.log('Latitude : ' + crd.latitude); 
    console.log('Longitude: ' + crd.longitude); 
    console.log('More or less ' + crd.accuracy + ' meters.'); 
    //Here I want to execute my callback to render. 
}; 

function error(err) { 
    console.warn('ERROR(' + err.code + '): ' + err.message); 
}; 

navigator.geolocation.getCurrentPosition(success, error, options); 

Но geolocation.getCurrentPosition имеет prescribed callbacks и поэтому кажется не существует никакого способа передачи этого обратного вызова в качестве параметра обратный вызов успеха

Есть ли способ передать этот обратный вызов в качестве дополнительного параметра обратного вызова успеха? Обратный вызов, отправляемый как параметр обратного вызова, кажется странным, но формирование моего первоначального обратного вызова для обработки логики местоположения за пределами модуля местоположения также кажется липким.

ответ

3

Используйте bind!

navigator.geolocation.getCurrentPosition(
    success.bind(null, dataLoaded), 
    error, 
    options); 

// 

function success(dataLoaded, pos) { 
    var crd = pos.coords; 

    console.log('Your current position is:'); 
    console.log('Latitude : ' + crd.latitude); 
    console.log('Longitude: ' + crd.longitude); 
    console.log('More or less ' + crd.accuracy + ' meters.'); 
    dataLoaded(); 
} 

Это по существу создает новую версию функции, в которой вы можете заменить this и предварительно заполнить аргументы. Таким образом, обратный вызов, передаваемый на getCurrentPosition, является однопараметрической функцией, которая при вызове будет pos в вашей функции success.

+0

Что такое сутенерное решение !! Позвольте мне попробовать! :) –

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