Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Асинхронность callback с return и throw (https://javascript.ru/forum/dom-window/75595-asinkhronnost-callback-s-return-i-throw.html)

victornalchik 25.10.2018 07:49

function asyncCallDomainWithoutCallback() {
	let resultText;
	const xhr = new XMLHttpRequest();
	const url = 'http://bar.other/resources/public-data/';
  xhr.timeout = 30000;
  xhr.open('POST', url, true);
  xhr.send(); 
  xhr.onload = ()=>{resultText = xhr.responseText};
  return resultText;
}

function handler1(){
 const serverResponse = asyncCallDomainWithoutCallback(); 
 if(serverResponse) { // serverResponse = undefined
 	throw new Error('THROW будет упущен')
 }
return serverResponse;
}





function asyncCallDomainWitCallback(callbackForAsync) {
	const xhr = new XMLHttpRequest();
	const url = 'http://bar.other/resources/public-data/';
  xhr.timeout = 30000;
  xhr.open('POST', url, true);
  xhr.send(); 
  xhr.onload = ()=>{ callbackForAsync(xhr.responseText) };
}

function handler2(callbackForAsync){
	asyncCallDomainWitCallback(callbackForAsync);
}

function callback (resultText) {
  const serverResponse = asyncCallDomain(callback); 
 if(serverResponse) {
 	throw new Error('THROW будет упущен') // никто не получит ошибку
 }else{
 
 }
return serverResponse; // никто не получит возвращаемое значение
}


Вот код описывающий приведенное выше описание

victornalchik 25.10.2018 07:54

function asyncCallDomainWithoutCallback() {
	let resultText;
	const xhr = new XMLHttpRequest();
	const url = 'http://bar.other/resources/public-data/';
  xhr.timeout = 30000;
  xhr.open('POST', url, true);
  xhr.send(); 
  xhr.onload = ()=>{resultText = xhr.responseText};
  return resultText;
}

function handler1(){
 const serverResponse = asyncCallDomainWithoutCallback(); 
 if(serverResponse) { // serverResponse = undefined
 	throw new Error('THROW будет упущен')
 }
return serverResponse;
}





function asyncCallDomainWitCallback(callbackForAsync) {
	const xhr = new XMLHttpRequest();
	const url = 'http://bar.other/resources/public-data/';
  xhr.timeout = 30000;
  xhr.open('POST', url, true);
  xhr.send(); 
  xhr.onload = ()=>{ callbackForAsync(xhr.responseText) };
}

function handler2(callbackForAsync){
	asyncCallDomainWitCallback(callbackForAsync);
}

function callback (resultText) {
  const serverResponse = asyncCallDomain(callback); 
 if(serverResponse) {
 	throw new Error('THROW будет упущен') // никто не получит ошибку
 }else{
 
 }
return serverResponse; // никто не получит возвращаемое значение
}

Вот код описывающий поведение callback.

SuperZen 25.10.2018 08:53

эти(твои) примеры, в моем мозгу ))) выглядят так:
let a = 1
let b = 2
console.log(c + d)


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