我有以下通用代码来调用 AJAX 请求。我的问题是 $.ajax 是否需要“return”关键字(因为做 $.ajax 无论如何都会返回一个 promise )或者它是否用于其他目的?
doXhr: function(postData, requestUrl){
var promise = new Ember.RSVP.Promise(function(resolve, reject) {
return $.ajax({ //Is the "return" required on this line ?
url: requestUrl,
})
.done(function(response, status, xhrObject) {
resolve(response);
})
.fail(function(xhrObject, status, error){
reject(errorObj);
});
})
return promise;
},
最佳答案
就像其他 promise 库(Native、Bluebird 等)一样,resolve
、reject
函数实际上是回调,因此不需要在 新 promise
。 (如果你从不调用 resolve 或 reject,你的 promise 将永远悬而未决)。
RSVP.Promise
的返回中唯一需要的返回就像你在底部所拥有的一样——尽管只有当你是 await
ing 或 然后
ing doXhr
另外,整洁的小提示:
随着最近的 Ember ,你可以这样做:
import { Promise } from 'rsvp';
new Promise((resolve, reject) => {
// stuff
});
编辑
要了解 promise 的函数体是如何执行的,您需要查看 Promise 的构造函数: https://github.com/tildeio/rsvp.js/blob/master/lib/rsvp/promise.js#L143
resolver
函数(您在做出新 promise 时定义的函数)被传递到此处 https://github.com/tildeio/rsvp.js/blob/master/lib/rsvp/-internal.js#L231然后进行评估。
希望这对您有所帮助!
关于javascript - Ember.RSVP.Promise 中的 AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51800482/