Se creó una promesa en un controlador pero no se devolvió

Acabo de comenzar a usar las promesas de bluebird y obtengo un error confuso

Resumen de código

var
  jQueryPostJSON = function jQueryPostJSON(url, data) {

    return Promise.resolve(
      jQuery.ajax({
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        type: "POST",
        url: url,
        data: JSON.stringify(data)
      })
    ).then(function(responseData) {
      console.log("jQueryPostJSON response " + JSON.stringify(responseData, null, 2));
      return responseData;
    });
  },
  completeTask = function completeTask(task, variables) {
    console.log("completeTask called for taskId: "+task.id);
    //FIXME reform variables according to REST API docs
    var variables = {
      "action" : "complete",
      "variables" : []
    };
    spin.start();
    return jQueryPostJSON(hostUrl + 'service/runtime/tasks/'+task.id, variables)
      .then(function() {
        gwl.grrr({
          msg: "Completed Task. Definition Key: " + task.taskDefinitionKey,
          type: "success",
          displaySec: 3
        });
        spin.stop();
        return null;
      });
  }

La función jQueryPostJSON parece funcionar bien como está cuando se usa en otro lugar, pero en ese caso hay datos devueltos por el servidor.

Cuando se usa dentro de la tarea completa, la POST es exitosa como se puede ver en el lado del servidor, pero la función nunca se llama en su lugar en la consola. Obtengo el error

completeTask called for taskId: 102552
bundle.js:20945 spin target: [object HTMLDivElement]
bundle.js:20968 spinner started
bundle.js:1403 Warning: a promise was created in a  handler but was not returned from it
    at jQueryPostJSON (http://localhost:9000/dist/bundle.js:20648:22)
    at Object.completeTask (http://localhost:9000/dist/bundle.js:20743:14)
    at http://localhost:9000/dist/bundle.js:21051:15
From previous event:
    at HTMLDocument.<anonymous> (http://localhost:9000/dist/bundle.js:21050:10)
    at HTMLDocument.handleObj.handler (http://localhost:9000/dist/bundle.js:5892:30)
    at HTMLDocument.jQuery.event.dispatch (http://localhost:9000/dist/bundle.js:10341:9)
    at HTMLDocument.elemData.handle (http://localhost:9000/dist/bundle.js:10027:28)
bundle.js:1403 Unhandled rejection (<{"readyState":4,"responseText":"","sta...>, no stack trace)

La advertencia por la que recibo la razón, ese no es el problema. Es el rechazo no controlado y el hecho de que, de hecho, no hubo ningún error de la POST.

la línea 21050 está aquí Estoy probando la combinación de estos para funciones de módulos separados

jQuery(document).bind('keydown', 'ctrl+]', function() {
        console.log("test key pressed");
        api.getCurrentProcessInstanceTask()
        .then(function(task) {
          api.completeTask(task);
        });

      });

La salida de la primera función llamada api.getCurrentProcessInstanceTask () parece indicar que funciona correctamente, pero aquí está de todos modos

getCurrentProcessInstanceTask = function getCurrentProcessInstanceTask() {

      if (!currentProcess || !currentProcess.id) {
        return Promise.reject(new Error("no currentProcess is set, cannot get active task"));
      }

      var processInstanceId = currentProcess.id;

      return Promise.resolve(jQuery.get(hostUrl + "service/runtime/tasks", {
          processInstanceId: processInstanceId
        }))
        .then(function(data) {
          console.log("response: " + JSON.stringify(data, null, 2));
          currentProcess.tasks = data.data;
          // if(data.data.length > 1){
          //   throw new Error("getCurrentProcessInstanceTask expects single task result. Result listed "+data.data.length+" tasks!");
          // }
          console.log("returning task id: "+data.data[0].id);
          return data.data[0];
        });
    },

Respuestas a la pregunta(1)

Su respuesta a la pregunta