【发布时间】:2016-05-27 10:26:01
【问题描述】:
我有一个 Ember 承诺电话如下;
var promise = new Ember.RSVP.Promise(function(resolve, reject) {
return $.ajax({
//want this common
url: requestUrl,
type: type, // HTTP method
dataType: dataType, // type of data expected from the API response
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(postData)
})
.done(function(data, status, xhrObject) {
//But want this to be different
// resolve call
})
.fail(function(xhrObject, status, error){
// reject call
});
})
我的问题是我可以为 $.ajax() 使用通用代码,但对 done() 回调有不同的实现 我可以通过从调用位置传递一些参数来检查。
所以基本上,我想要
if (someparam == 'handleDone1')
call resolve(data)
else
call resolve({data})
【问题讨论】:
-
避免使用
Promiseconstructor antipattern!只需var promise = Ember.RSVP.Promise.resolve($.ajax(…));。 -
关于您的问题 - 没有什么可以阻止您在回调中简单地放置
if语句,是吗? -
是的,我有一个外部函数,它有 var promise = new Ember.RSVP.Promise() 代码......所以如果我将任何参数说“someparam”传递给这个外部函数,我不能在 .done(function() {..}) 中访问它
-
“外部函数”是什么意思?你可以通过闭包访问任何你可以在回调之外访问的东西。
-
如果我尝试将它传递给 done...done(function(data, status, xhrObject, paramFromExternalFn)),我会得到一个未定义的参数
标签: javascript jquery ajax ember.js rsvp-promise