ventajas tipos sincrónicos sincronica sincrona medios herramientas ejemplos comunicacion caracteristicas asincronica asincrona javascript asynchronous angular-ui-router cross-domain postmessage

javascript - tipos - Comunicación asincrónica páginas cruzadas



tipos de comunicacion sincronica (1)

Tengo una página addin.html . Puede mostrar otro editor página (que no necesariamente está en el mismo dominio)

popup = window.open("https://localhost:3000/#/posts/editor/", "popup")

Luego, las dos páginas tienen a cada oyente dentro y pueden enviarse datos entre ellos

// listen: function receiveMessage(event) { document.getElementById("display").innerHTML = JSON.stringify(event.data); } window.addEventListener("message", receiveMessage, false); // send: function sendMessage() { popup.postMessage("data", popup.location.href); }

editor es realizado por ui-router . Inicialmente, resuelve init antes de cargar la página:

.state(''editor'', { controller: ''EditorCtrl'', resolve: { init: [ ... ] }, ... }; app.controller(''EditorCtrl'', [''$scope'', ''init'', function ($scope, init) { ... }]

Lo que quiero implementar ahora es, cuando addin.html editor , envía algunos datos al editor , e init necesita resolver estos datos, antes de cargar la página. editor podría bloquearse antes de recibir los datos de addin.html .

¿Alguien sabe cómo enmendar los receptores y remitentes (y algo más) para lograr esto?


Puede devolver una promesa personalizada y resolverla cuando lo desee como el siguiente código

.state(''editor'', { controller: ''EditorCtrl'', resolve:{ init: function($q){ var deferred = $q.defer(); window.addEventListener("message", function(event){ deferred.resolve(event.data); }, false); return deferred.promise; } } });

El controlador espera que el elemento anterior se resuelva por completo antes de la creación de instancias.