Sha*_*bir 2 javascript promise typescript es6-promise angular
我对JavaScript承诺和承诺链有一个浅薄的理解.说,我有一个方法如下所示.它的编写是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
});
}
Run Code Online (Sandbox Code Playgroud)
在这里,我有两个回归,第一个是
返回this.db.find
该发现功能是一种承诺
然后结束链返回
返回this.db.post(人)
即使邮政功能也是一种承诺.
在这里,我有三个问题
1)当这个函数执行时,会返回什么?
2)如果函数立即返回promise,链接源何时执行?
2)在分层应用程序中重构promise链的更好方法是什么?如少数链则需要在服务中执行,其他需要在UI执行,我该如何构建我的诺言代码?
首先,我认为您可以通过为自己制作一些小例子来轻松测试我们的问题.当我不清楚事情是如何工作的时候,我发现创建一个小例子来试试看看会发生什么是非常有用的.让我们也可以解决这个问题(另请参阅https://plnkr.co/edit/K18o4Lp2jtUincjyG5wi?p=preview了解工作版本;打开控制台查看结果!):
function test() {
return returnPromise().then((value) => {
console.log('1st then, inside test(): ' + value);
return 'Hello';
}).then((value) => {
console.log('2nd then, inside test(): ' + value);
return 'world';
});
}
function returnPromise() {
return new Promise(function(resolve, reject) {
resolve('start of new Promise');
});
}
test().then((value) => {
console.log('3rd then, after calling test: ' + value);
});
Run Code Online (Sandbox Code Playgroud)
对于你的问题:
then函数一起返回.如果您将另一个添加then到返回的Promise中,它将添加到链的末尾.这就是我们在做的时候所看到的test().then(...).returnPromise.在这里,我们返回一个新的承诺.Promise的主体在resolve完成时调用该方法(在这种情况下即刻),触发Promise来解析并执行then链接到Promise的所有方法.通常,Promise不会立即解决,但会首先执行异步任务(例如,从服务器检索数据).| 归档时间: |
|
| 查看次数: |
9763 次 |
| 最近记录: |