jQuery ajax con ES6 Promises

Estoy intentando hacer una request posterior a través de jQuery utilizando una promise de ES6:

Tengo una function:

getPostPromise(something, anotherthing) { return new Promise(function(resolve, reject) { $.ajax({ url: someURL, type: 'post', contentType: 'application/json; charset=utf-8', data: JSON.stringify( something: something, anotherthing: anotherthing }), dataType: 'json', success: resolve, error: reject }); }); } 

y lo llamo así:

 getPostPromise( 'someFooStuff', 'someBarStuff' ).then( function(returnedData) { console.log("Good: ", returnedData); }, function(responseObject) { console.log("Bad: ", responseObject); } ).catch( function(errorThrown) { console.log("Exception: ", errorThrown); } ); 

Mi server está devolviendo una respuesta como se esperaba con el cuerpo de la request en formatting JSON, pero la salida de mi console es:

Bueno: indefinido

¿Por qué no obtengo los datos devueltos?

Gracias a todos / todos por cualquier ayuda.

— ACTUALIZAR EDITAR —

He networkingucido mi js a solo:

 import $ from 'jquery'; $.get('http://localhost:8008/api/user') .done(function(data) { console.log(data); }); 

Todavía no estoy definido como salida. Si abro la request en la pestaña de networking, puedo ver el object de respuesta con los datos correctos. La request se realiza, mi server está contento y responde, y los resultados están en mi browser, pero el parámetro de datos de hecho no está definido. Estoy perplejo.

— ACTUALIZACIÓN 2 – SOLUCIÓN ENCONTRADA —

Descubrí que el problema estaba en usar: https://github.com/jpillora/xdomain para evitar CORS. Parecería que esa biblioteca arruina los valores de retroceso de alguna manera. Lo he eliminado e implementaré CORS correctamente y al diablo con browseres que no lo admiten.

Los methods de jQuery Ajax devuelven promises por sí mismos, no es necesario que los envuelva en absoluto.

Pero puede, por supuesto, hacerlo por coinheritance con la promise API de ES6.

ACTUALIZACIÓN jQuery 3.0+ implementa la API Promise / A + , por lo que ya no hay motivo para include nada en jQuery moderno. Lea sobre las peculiaridades de la implementación prometedora de jQuery antes de la versión 3.0 .

Para las versiones de jQuery anteriores a la 3.0, lo desacoplaría más de lo que lo hizo:

 function ajax(options) { return new Promise(function (resolve, reject) { $.ajax(options).done(resolve).fail(reject); }); } 

y

 ajax({ url: someURL, type: 'post', contentType: 'application/json; charset=utf-8', data: JSON.stringify({ something: something, anotherthing: anotherthing }) }).then( function fulfillHandler(data) { // ... }, function rejectHandler(jqXHR, textStatus, errorThrown) { // ... } ).catch(function errorHandler(error) { // ... });