Javascript 如何使包含映射承诺的函数返回承诺?
我有一个AngularJS函数:Javascript 如何使包含映射承诺的函数返回承诺?,javascript,angularjs,typescript,Javascript,Angularjs,Typescript,我有一个AngularJS函数: topicsSave = (): ng.IPromise<any> => { var self = this; var defer = self.$q.defer(); var requests = self.topics .map((rowData: any, i: number) => { var deferred = self.$q.defer();
topicsSave = (): ng.IPromise<any> => {
var self = this;
var defer = self.$q.defer();
var requests = self.topics
.map((rowData: any, i: number) => {
var deferred = self.$q.defer();
var entityId = rowData['topicId'];
self.$http({ url: self.url,
method: "PUT",
data: rowData
}).then((response: ng.IHttpPromiseCallbackArg<any>): void => {
//
deferred.resolve(response.data);
}, (error: ng.IHttpPromiseCallbackArg<any>): void => {
deferred.reject(error);
});
return deferred.promise;
}
);
self.$q.all(requests)
.then(
(): void => {
self.topicsForm.$setPristine();
},
(): void => {
});
}
从我看到的情况来看,$q.all返回一个承诺,但是我需要如何设置另一个defer变量并从中进行延迟呢?的确如此
topicsSave = (): ng.IPromise<any> => {
...
return self.$q.all(requests)
.then(
(): void => {
self.topicsForm.$setPristine();
},
(): void => {
return $q.reject('$q.all rejection reason');
});
}
你到底为什么需要延期付款?请注意,将延迟与现有承诺结合使用被称为。我将遍历datagrid的行,并对每一行进行保存。每次保存都有一个完成承诺。我使用$q.all来等待所有的承诺保存完成,然后我将网格状态设置为clean。注意,为了简化这个示例,我删除了几行并用//替换它们。执行保存的代码似乎可以正常工作,但是我想让topicsSave函数在完成后返回一个承诺。这是我现在不清楚的地方。我是否需要在self.topicsForm.之后返回$q.resolve?不,承诺已经解决了。如果需要,您可以返回将传递给下一个“then”的数据。这就是为什么延迟在jQuery之外是无用的。