发送 Restangular POST 后如何获取响应对象?
firstAccount.post("Buildings", myBuilding).then(function() {
console.log("Object saved OK");
}, function() {
console.log("There was an error saving");
});
我正在尝试获取新的对象 ID。
谢谢。
发送 Restangular POST 后如何获取响应对象?
firstAccount.post("Buildings", myBuilding).then(function() {
console.log("Object saved OK");
}, function() {
console.log("There was an error saving");
});
我正在尝试获取新的对象 ID。
谢谢。
我是 Restangular 的创造者。弗利姆是对的:)。
在承诺中,您将获得从服务器返回的对象 :)
firstAccount.post("Buildings", myBuilding).then(function(addedBuilding) {
console.log("id", addedBuilding.id);
}, function() {
console.log("There was an error saving");
});
谢谢!
我没有直接使用过 Restangular,但是你的 POST 可能需要返回一个带有 ID 的 JSON 对象。然后,您的成功函数必须接受它作为参数。
firstAccount.post("Buildings", myBuilding).then(function(resp) {
console.log(resp.id); // if the JSON obj has the id as part of the response
});
restangular POST 将期望与发布的对象相同的对象作为响应。
打字稿定义清楚地看到了这一点。假设我们有一个方法将接收一个类型的对象,ITypeA
并将它发布到一个 url 中,如http://whatever/api/objects
. 假设 REST api 返回一个 201 和一个 json,其响应对象可以相同或不同。在我们的例子中,假设返回的类型是ITypeB
. 然后我们的 restangular 将无法使用标准的 POSTITypeA
并期望得到响应ITypeB
,因此下面的代码将不正确,因为restangular 会期望收到类型的响应ITypeA
(与发布的相同)。
public postAnObject(objectToPost: models.ITypeA): ng.IPromise<models.ITypeB> {
return this.restangular.all("objects")
.post<models.ITypeA>(objectToPost)
.then((responseObject: models.ITypeB) => {
return responseObject;
}, (restangularError: any) => {
throw "Error adding object. Status: " + restangularError.status;
});
}
这可以通过使用 customPOST 来解决,因此上面的代码将是正确的,如下所示:
public postAnObject(objectToPost: models.ITypeA): ng.IPromise<models.ITypeB> {
return this.restangular.all("objects")
.customPOST(objectToPost)
.then((restangularizedObjectTypeB: restangular.IElement) => {
return restangularizedObjectTypeB.plain();
}, (restangularError: any) => {
throw "Error adding object. Status: " + restangularError.status;
});
}
总结一下,有几点需要注意:
then
部分).post(objectA)
,restangular 将期望(如果有)成功的回调,其响应类型与 objectA 相同。.customPOST(objectA)
.plain()
上的方法,如我的第二个示例所示,其中响应实际上不是一个ITypeB
对象,而是一个restangular.IElement