私はJavaScript Promiseとpromise chainを浅く理解しています。 言うこと、私は以下のような方法があります。それは書かれて活字体であるが、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
});
}
と一致するように変更することができ、私は2つのリターンを持って、最初の
リターンが見つけた
をthis.db.findされます関数は約束です
となりました。返り値
リターンthis.db.post(人)
でもポスト機能は約束です。ここで
、私はこの機能を実行すると、何が戻ってくる3つの質問
1)を持っていますか?
2)関数がすぐに約束を返す場合は、チェーンがの場合はいつ実行されますか?
2)階層化されたアプリケーションで、プロミスチェーンをリファクタリングする優れた方法は何ですか。例えば。いくつかのチェーンを次には、サービスで実行する必要があります、他のUIで実行する必要があります、どのように私の約束コードを構成するのですか?
私はあなたの議論を正しく理解しているかどうかわかりません。私はexecutorが 'function(resolve、reject)'部分だと思います。それはそこにreturn文がありません。 'resolve'メソッドだけを呼び出します。 – Sjoerd
あなたが意味することがまだ分かっていないので、あなたはPlunkerの実例を与えることができますか? 'それで'連鎖したいなら、あなたはあなたの 'の中から新しい約束を返す。 MDNテキストでは、解決する新しいPromiseを作成するか、任意の値を返すことができます(自動的にPromiseでラップされ、解決されます)。返信文を残しておけば、「then」から「then」までの情報を渡すこともできません。 – Sjoerd
うわー、私はあなたが「何らかの価値を返すことができることを知らなかった。それは自動的に約束に包まれ、あなたのために解決される」ということです。あなたは、絶対に正しい。私は混乱したコメントを削除します。 – ArneHugo