Resumen

Obsoleto. Este módulo define la API heredada de dojo / _base / Deferred. El nuevo código debería usar dojo / Deferred en su lugar.

La API diferida se basa en el concepto de promesas que proporcionan una interfaz genérica para la eventual finalización de una acción asincrónica. La motivación de las promesas se trata fundamentalmente de crear una separación de preocupaciones que le permita a uno lograr el mismo tipo de patrones de llamada y flujo de datos lógicos en código asincrónico que se puede lograr en código sincrónico. Promises permite que uno pueda llamar a una función puramente con los argumentos necesarios para la ejecución, sin confundir la llamada con preocupaciones de si es sincronizada o asincrónica. No debería ser necesario modificar los argumentos de una llamada si la implementación cambia de sincronización a asíncrona (o viceversa). Al hacer que las funciones asíncronas devuelvan promesas, las preocupaciones de realizar la llamada se separan de las preocupaciones de la interacción asíncrona (que son manejadas por la promesa).

El diferido es un tipo de promesa que proporciona métodos para cumplir la promesa con un resultado exitoso o un error. El método más importante para trabajar con las promesas de Dojo es el método then (), que sigue la API de promesa propuesta por CommonJS. Un ejemplo del uso de una promesa de Dojo:

var resultingPromise = someAsyncOperation.then(function(result)... handle result ...,function(error)... handle error ...);

La llamada .then () devuelve una nueva promesa que representa el resultado de la ejecución de la devolución de llamada. Las devoluciones de llamada nunca afectarán el valor de las promesas originales.

Las instancias diferidas también proporcionan las siguientes funciones para compatibilidad con versiones anteriores:

  • addCallback (controlador)
  • addErrback (controlador)
  • devolución de llamada (resultado)
  • errback (resultado)

Las devoluciones de llamada pueden devolver promesas por sí mismas, por lo que puede crear secuencias complicadas de eventos con facilidad.

El creador del diferido puede especificar un cancelador. El cancelador es una función que se llamará si se llama a Deferred.cancel antes de que se active Deferred. Puede usar esto para implementar la cancelación limpia de una XMLHttpRequest, etc. Tenga en cuenta que cancelar activará el diferido con un CancelledError (a menos que su cancelador devuelva otro tipo de error), por lo que los errbacks deben estar preparados para manejar ese error para los aplazados cancelables.

Uso

Diferido(canceller);

Parámetro Escribe Descripción
puesto de dirigente Función Opcional

Ver el dojo / _base / Documentación de referencia diferida para más información.

Ejemplos de

Ejemplo 1

var deferred =newDeferred();setTimeout(function() deferred.callback(success:true);,1000);return deferred;

Ejemplo 2

Los objetos diferidos se utilizan a menudo al hacer que el código sea asincrónico. Puede ser más fácil escribir funciones de manera síncrona y luego dividir el código usando un diferido para desencadenar una respuesta a una operación de larga duración. Por ejemplo, en lugar de registrar una función de devolución de llamada para indicar cuándo se completa una operación de renderizado, la función simplemente puede devolver un aplazado:

// callback style:functionrenderLotsOfData(data, callback)var success =falsetryfor(var x in data)renderDataitem(data[x]);
        success =true;catch(e)if(callback)callback(success);// using callback stylerenderLotsOfData(someDataObj,function(success)// handles success or failureif(!success)promptUserToRecover(););// NOTE: no way to add another callback here!!

Ejemplo 3

El uso de un diferido no simplifica en absoluto el envío de código, pero proporciona una interfaz estándar tanto para las personas que llaman como para los remitentes, lo que proporciona a ambos una forma sencilla de dar servicio a múltiples devoluciones de llamada para una operación y libera a ambas partes de preocuparse por detalles como “hizo esto ¿Ya te llamaron? “. Con diferidos, se pueden agregar nuevas devoluciones de llamada en cualquier momento.

// Deferred style:functionrenderLotsOfData(data)var d =newDeferred();tryfor(var x in data)renderDataitem(data[x]);
        d.callback(true);catch(e)
        d.errback(newError("rendering failed"));return d;// using Deferred stylerenderLotsOfData(someDataObj).then(null,function()promptUserToRecover(););// NOTE: addErrback and addCallback both return the Deferred// again, so we could chain adding callbacks or save the// deferred for later should we need to be notified again.

Ejemplo 4

En este ejemplo, renderLotsOfData es sincrónico, por lo que ambas versiones son bastante artificiales. Poner la pantalla de datos en un tiempo de espera ayuda a mostrar por qué los diferidos se mueven:

// Deferred style and async funcfunctionrenderLotsOfData(data)var d =newDeferred();setTimeout(function()tryfor(var x in data)renderDataitem(data[x]);
            d.callback(true);catch(e)
            d.errback(newError("rendering failed"));,100);return d;// using Deferred stylerenderLotsOfData(someDataObj).then(null,function()promptUserToRecover(););

Tenga en cuenta que la persona que llama no tiene que cambiar su código en absoluto para manejar el caso asincrónico.

Propiedades

despedido

Definido por: dojo / _base / Deferred

promesa

Definido por: dojo / _base / Deferred

Métodos

addBoth(callback)

Definido por dojo / _base / Deferred

Agregue el controlador como devolución de llamada exitosa y devolución de llamada de error para esta instancia diferida.

Parámetro Escribe Descripción
llamar de vuelta Función

Devoluciones: cualquiera | indefinido

Devuelve este objeto diferido.

addCallback(callback)

Definido por dojo / _base / Deferred

Agrega una devolución de llamada exitosa para esta instancia diferida.

Parámetro Escribe Descripción
llamar de vuelta Función

Devoluciones: cualquiera | indefinido

Devuelve este objeto diferido.

addCallbacks(callback,errback)

Definido por dojo / _base / Deferred

Agrega devolución de llamada y devolución de llamada de error para esta instancia diferida.

Parámetro Escribe Descripción
llamar de vuelta Función Opcional

La devolución de llamada adjunta a este objeto diferido.

errback Función Opcional

La devolución de llamada de error adjunta a este objeto diferido.

Devoluciones: alguna

Devuelve este objeto diferido.

addErrback(errback)

Definido por dojo / _base / Deferred

Agrega devolución de llamada de error para esta instancia diferida.

Parámetro Escribe Descripción
errback Función

Devoluciones: cualquiera | indefinido

Devuelve este objeto diferido.

callback(value)

Definido por dojo / _base / Deferred

Completa la instancia diferida con éxito con el valor proporcionado

Parámetro Escribe Descripción
valor indefinido

cancel()

Definido por dojo / _base / Deferred

Cancela la operación asincrónica

errback(error)

Definido por dojo / _base / Deferred

Cumple la instancia diferida como un error con el error proporcionado

Parámetro Escribe Descripción
error indefinido

isCanceled()

Definido por dojo / _base / Deferred

Comprueba si se ha cancelado el aplazado.

Devoluciones: Booleano

isFulfilled()

Definido por dojo / _base / Deferred

Comprueba si el aplazado ha sido resuelto o rechazado.

Devoluciones: Booleano

isRejected()

Definido por dojo / _base / Deferred

Comprueba si el aplazado ha sido rechazado.

Devoluciones: Booleano

isResolved()

Definido por dojo / _base / Deferred

Comprueba si se ha resuelto el aplazado.

Devoluciones: Booleano

progress(update)

Definido por dojo / _base / Deferred

Envíe eventos de progreso a todos los oyentes

Parámetro Escribe Descripción
actualizar indefinido

reject(error)

Definido por dojo / _base / Deferred

Cumple la instancia diferida como un error con el error proporcionado

Parámetro Escribe Descripción
error indefinido

resolve(value)

Definido por dojo / _base / Deferred

Cumple la instancia diferida con éxito con el valor proporcionado

Parámetro Escribe Descripción
valor indefinido

then(resolvedCallback,errorCallback,progressCallback)

Definido por dojo / _base / Deferred

Agrega un fulderedHandler, errorHandler y progressHandler que se llamarán para completar una promesa. Se llama a fulotedHandler cuando se cumple la promesa. Se llama al errorHandler cuando falla una promesa. Se llama a progressHandler para eventos de progreso. Todos los argumentos son opcionales y los valores que no son de función se ignoran. ProgressHandler no es solo un argumento opcional, sino que los eventos de progreso son puramente opcionales. Los proveedores de promesas no están obligados a crear eventos de progreso.

Esta función devolverá una nueva promesa que se cumplirá cuando finalice la devolución de llamada dada de fulderedHandler o errorHandler. Esto permite encadenar las operaciones de promesa. El valor devuelto por el controlador de devolución de llamada es el valor de cumplimiento de la promesa devuelta. Si la devolución de llamada arroja un error, la promesa devuelta se moverá al estado fallido.

Parámetro Escribe Descripción
resuelto Función Opcional
errorCallback Función Opcional
progressCallback Función Opcional

Devoluciones: alguna

Devuelve una nueva promesa que representa el resultado de la ejecución de la devolución de llamada. Las devoluciones de llamada nunca afectarán el valor de las promesas originales.

Ejemplos de

Ejemplo 1

Un ejemplo del uso de una promesa compatible con CommonJS:

asyncComputeTheAnswerToEverything().then(addTwo).then(printResult, onError);>44

when(valueOrPromise,callback,errback,progback)

Definido por dojo / when

Aplica de forma transparente devoluciones de llamada a valores y / o promesas.

Acepta promesas pero también maneja de manera transparente las no promesas. Si no se proporcionan devoluciones de llamada, devuelve una promesa, independientemente del valor inicial. Las promesas extranjeras se convierten.

Si se proporcionan devoluciones de llamada y el valor inicial no es una promesa, la devolución de llamada se ejecuta inmediatamente sin manejo de errores. Devuelve una promesa si el valor inicial es una promesa, o el resultado de la devolución de llamada en caso contrario.

Parámetro Escribe Descripción
valueOrPromise indefinido

Ya sea un valor regular o un objeto con un then() método que sigue la especificación Promises / A.

llamar de vuelta Función Opcional

La devolución de llamada se invocará cuando se resuelva la promesa o se reciba una no promesa.

errback Función Opcional

La devolución de llamada se invoca cuando se rechaza la promesa.

progback Función Opcional

La devolución de llamada se invoca cuando la promesa emite una actualización de progreso.

Devoluciones: dojo / promesa / promesa | resumen: | nombre:

Promesa, o si se proporciona una devolución de llamada, el resultado de la devolución de llamada.