var result = await someFunc () возвращает объект, но я ожидал список объекта - PullRequest
0 голосов
/ 11 октября 2019

Я написал следующую функцию для загрузки indexeddb. (из IndexedDB 備忘 メ モ ) Я думаю, что эта функция должна возвращать массив объекта. Но иногда он возвращает объект. Каковы возможности ошибки? Инструмент разработчика Chrome сказал, что тип объекта был Array во время выполнения функции «load». Но после полученных «записей» идет тип объекта.

    async function load(dbobj, db, index, range) {
      return new Promise(async (resolve, reject) => {
        const saves = [];
        const req = db.transaction(dbobj.storeName).objectStore(dbobj.storeName).index(index).openCursor(range);
        const onfinished = () => {
          console.log(`${saves.length} saves found.`);
          if (saves.length > 0) {
            resolve(saves[saves.length - 1]);
          }
        };
        req.onerror = reject;
        req.onsuccess = (ev) => {
          const cur = ev.target.result;
          if (cur) {
            saves.push(cur.value);
            cur.continue();
          } else {
            onfinished();
          }
        };
      });
    }

    // example of receiving data
    var records = await load(dbobj, db, index, range);

1 Ответ

1 голос
/ 11 октября 2019

вы разрешаете только значение последнего индекса! разрешить (сохранить), если вам нужен весь массив;

async function load(dbobj, db, index, range) {
      return new Promise(async (resolve, reject) => {
        const saves = [];
        const req = db.transaction(dbobj.storeName).objectStore(dbobj.storeName).index(index).openCursor(range);
        const onfinished = () => {
          console.log(`${saves.length} saves found.`);
          if (saves.length > 0) {
            resolve(saves); // you are resolving only the value at the last index! resolve(saves) if you need the entire array;
          }
        };
        req.onerror = reject;
        req.onsuccess = (ev) => {
          const cur = ev.target.result;
          if (cur) {
            saves.push(cur.value);
            cur.continue();
          } else {
            onfinished();
          }
        };
      });
    }
...