var viewmodel = service.createCustomer();
是我调用 requirejs 模块的方式。
我如何创建一个延迟对象,以便我的 createCustomer 返回在服务调用内创建的 CreateCustomerViewModel?
define(['viewmodels/CreateCustomerViewModel'],function (CreateCustomerViewModel) {
function createCustomer() {
$.getJSON('Customer/Create')
.done(function (response) {
return new CreateCustomerViewModel(response);
})
.fail(function (error) {
alert(error);
});
}
return {
createCustomer: createCustomer
};
});
最佳答案
- 您必须使用
.then()
而不是.done()
来修改负载。 - 您应该让您的
createCustomer
方法返回修改后的负载。
您的模块定义变为:
function createCustomer() {
return $.getJSON('Customer/Create')
.then(function (response) {
return new CreateCustomerViewModel(response);
});
}
return {
createCustomer: createCustomer
};
用作:
customerCreator.createCustomer()
.done(function (model) {
// yay! let's use this model
})
.fail(function () {
console.error("Cannot create customer");
});
您还应该将 .fail()
处理移到外部,尽可能移到应用程序的较高位置,以便错误消息中的措辞可以有更准确的上下文。
附注作为一个吹毛求疵的人,您不应该使用 POST 请求而不是 GET 来创建实体吗?
关于jquery - 使用 jquery 从 Promise/ajax 调用返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19070845/