【发布时间】:2017-04-05 17:57:20
【问题描述】:
我对 JavaScript Promise 和 Promise 链的理解很浅。 说,我有一个如下所示的方法。它是用 TypeScript 编写的,但可以修改以匹配 JavaScript ES6
private InsertPersonInDB(p : Person) {
return this.db.find({ //<- would this return?
selector: {objType: 'Person'},
fields: ['_id'],
sort: ['_id']
}).then( result => {
let allpersondIds : string[] = [];
(result.docs).forEach(rec => {
allpersondIds.push(rec._id);
});
return allpersondIds;
}).then ( allpersonIdsInDB => {
var id = this.getIdfromPersonName(person.personName, allpersonIdsInDB);
person._id = id;
return this.db.post(person) //<- or would this return?
}
}
//Calling function
for(let person of this.persons) {
InsertPersonInDB(person).then(result => {
console.log(result)
//Some UI updates
}).catch(err => {
console.log(err)
//Some UI updates notifying user about failure
});
}
这里,我有两个返回,第一个是
返回 this.db.find
哪个find函数是一个promise
然后链结束返回
返回 this.db.post(person)
即使是 post 函数也是一个承诺。
在这里,我有三个问题
1) 当这个函数执行时,会返回什么?
2) 如果函数立即返回promise,那么链thens 会在什么时候执行?
2) 在分层应用程序中重构承诺链的更好方法是什么。例如。少数链然后需要在服务中执行,其他需要在UI中执行,我如何构建我的承诺代码?
【问题讨论】:
标签: javascript angular typescript promise es6-promise