地图循环中的链承诺

时间:2017-10-02 16:04:10

标签: javascript jquery promise indexeddb

我知道这个话题上有很多帖子,但我无法弄明白。我是所有这些承诺的新手,但我遇到了一个需要解决的具体问题。在下面的代码中,我循环遍历数组'fnFoes',并在此fnFoes中通过另一个数组'avatar'。对于avatar中的每个元素,indexedDB中的svg-code被加载并附加到html。我的问题是:我希望这个函数在完成函数并继续下一个函数之前完全加载并附加所有svg。

我试图将整个函数包装到promis中但它仍然在加载所有svg之前继续。我认为这与indexedDB有关,但老实说,我只是不明白。

经过2天的阅读和试​​错后,非常感谢任何帮助!! 谢谢 弗里茨

this

1 个答案:

答案 0 :(得分:0)

我很难理解你的代码,但你可能想要这样的东西:

function connect() {
  return new Promise(function(resolve, reject){
    var request = indexedDB.open();
    request.onsuccess = () => resolve(request.result);
  });
}

function dothings(db, things) {
  var promises = [];
  for(var thing of things) {
    var promise = dothing(db, thing);
    promises.push(promise);
  }

  return Promise.all(promises);
}

function dothing(db, thing) {
  return new Promise(function(resolve, reject) {
    var tx = db.transaction('svgs');
    var store = tx.objectStore('svgs');
    var request = store.get(thing);
    request.onsuccess = () => resolve(request.result);
  });
}

function foo() {
  var things = getthings();
  connect().then(function(db) {
    return dothings(db, things);
  });
}