Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jquery 2 promise (https://javascript.ru/forum/jquery/68576-jquery-2-promise.html)

alexandr2006 24.04.2017 17:15

jquery 2 promise
 
loadDetail() {

		var defer = $.Deferred()

		this.setState({bla-bla}, (event) => {
			this.ajaxGetDetail(this.state.openedBidId).then( (json) => {
				this.setState({
					bla-bla
				}, () => {

					if (this.transmissionCollection.length === 0) {
						this.ajaxRequestTransmission().then( (result) => {
							result.map( (item)=>{
								let obj = {}
								obj[`${item.id}`] = item.name
								this.transmissionCollection.push( obj )
							})

							let transmission_value = blabla

							this.setState({ blabla1 }, () => {
								return defer.promise();
							})

						})

					} else {

						let transmission_value = blabla
							
						this.setState({ blabla2 }, () => {
							return defer.promise();
						})

					}
				})

			});
		});
	}


this.loadDetail().then (() => {
	console.log('bla')
})



не пойму почему ругается на самый последний then: Cannot read property 'then' of undefined

Dilettante_Pro 24.04.2017 17:34

alexandr2006
А что у вас такое loadDetail() { ?
Объявление функции?

alexandr2006 24.04.2017 17:36

Цитата:

Сообщение от Dilettante_Pro (Сообщение 450915)
alexandr2006
А что у вас такое loadDetail() { ?
Объявление функции?

ага. Это кусок из кода на react

Dilettante_Pro 24.04.2017 17:41

alexandr2006,
А не function loadDetail() { ?

Или, как в react
loadDetail: function() {

alexandr2006 24.04.2017 18:25

Цитата:

Сообщение от Dilettante_Pro (Сообщение 450915)
alexandr2006
А не function loadDetail() { ?

Или, как в react
loadDetail: function() {

С функцией все нормально:
https://facebook.github.io/react/doc...omponents.html

Nexus 24.04.2017 20:51

[quote=alexandr2006;450912]
не пойму почему ругается на самый последний then: Cannot read property 'then' of undefined[/QUOTE]

[JS]this.loadDetail().then (() => {
    console.log('bla')
})


Если ошибка тут, то вероятно потому что loadDetail ничего не возвращает (void).
Передавайте функцию в кач-ве аргумента и вызывайте её как callback.

alexandr2006 25.04.2017 08:19

Цитата:

Сообщение от Nexus (Сообщение 450944)
this.loadDetail().then (() => {
    console.log('bla')
})


Если ошибка тут, то вероятно потому что loadDetail ничего не возвращает (void).
Передавайте функцию в кач-ве аргумента и вызывайте её как callback.

Вот же возвращаю:

return defer.promise();

Другое дело что может в jquery 2 как-то подругому надо

Dilettante_Pro 25.04.2017 12:12

alexandr2006,
Интересно, а что в этом контенте this?

Nexus 25.04.2017 13:10

Цитата:

Сообщение от alexandr2006 (Сообщение 450980)
Вот же возвращаю:

return defer.promise();

Другое дело что может в jquery 2 как-то подругому надо

«return defer.promise();» возвращается в callback'e метода «setState» (и не факт, что этот метод вообще что-то возвращает).
Даже если «setState» возвращает что-либо, то это «что-либо» так и останется в callback'e асинхронного запроса.
Ну и асинхронные запросы устроены так, что код продолжит выполняться не дожидаясь окончания запроса.
Это я к тому, что getDetail наверняка нифига не возвращает.


Часовой пояс GMT +3, время: 23:57.