私は以前はうまくいくと思われていましたが、今はできません。ポーチを呼び出し中からコードに戻さないことを約束します
私はすべてのものが整っていると思いますが、.getが呼び出された後は決してforループには到達しません。
それは約束の終わりまで飛び、次に戻る(.get)の中に戻り、解決してから外に出ます。
エラーがあった場合は、キャッチにジャンプしていたはずですが、そうではありませんでした。どのようにforループが欠けていますか?ここで
コードです:
function readAllImagesFromPouch(id, imageDisplay) {
return new Promise(function (resolve, reject) {
var startElement = document.getElementById(imageDisplay);
var image = "";
// Get all attachments for this id
DB_TaskImages.get(id, { attachments: true }).then(function (doc) {
for (var key in doc._attachments) {
DB_TaskImages.getAttachment(doc._id, key).then(function (blob) {
var img = document.createElement('img');
blob = resizeImage(blob, "100", "60");
var url = URL.createObjectURL(blob);
img.src = url;
//alert(img.outerHTML);
//startElement.appendChild(img);
$(startElement).append("<div class='row' style='border:1px solid black'><div class='col-xs-10'>" +
img.outerHTML +
"</div>" +
"<div class='col-xs-1' style='padding-top:20px'>" +
"<img src='../Images/delete.png' alt='Delete' class='taskimage'>" +
"</div></div>"
);
return;
}).catch(function() {
console.log("No attachment for doc._id: " + doc._id + " and key: " + key);
})
}
return;
}).then(function() {
resolve();
}).catch(function (err) {
console.log("Image not there for id: " + id);
showMsg("Image not there for id: " + id);
reject(err);
})
}); // end of promise
}
そしてそれは、このコードから呼び出されます。まず
readAllImagesFromPouch("006", "divImages").then(function() {
}).catch(function (err) {
console.log("In catch for readAllImagesFromPouch with err: " + err);
})
おかげで、
トム
問題が見つかりました。それはforループのエラーと関係していました。それはdoc.attachmentsだったはずです(なぜポーチドキュメントにアンダースコアを付けていたのかはわかりません - 私がそれを保存した方法かもしれません)。私の約束が正しければ私は好奇心が強いでしょう、そして私は正しい場所にすべての返品、解決、拒絶を持っています。まだこれを手に入れようとしています。 – tshad
いいえ、あなたはまだPromiseコンストラクタをanti-patternにしておき、 'for ... in'ループ内のすべてのコードは、約束が解決された後に実行されます。あなたの' $(startElement).append'は、 –
['Promise'コンストラクタの反パターンを避けてください](http://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it)! – Bergi