indexedDB函数返回跨模块导入/导出

jgwigjjp  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(183)

我还是个初学者,所以我希望这有意义。
我尝试将返回变量从具有IndexedDB事务/游标的函数导出到具有get事务的另一个模块,但是该请求始终未定义。是否可以将IndexedDB函数的值跨到同一域中的其他模块?

db.js-正在导出的函数

...
function getAllData() {
    // can use getAll() however not as efficient.
    // let data = [];
    let data = [];
    let store = db.transaction("forms").objectStore("forms");
    store.openCursor().onsuccess = (event) => {
        let cursor = event.target.result;
        if (cursor) {
            console.log("FORM name is " + cursor.value.name + " and form counter is " + cursor.key);
            // data.push(cursor.value.name);
            data.push(cursor.value);
            cursor.continue();
        } else {
            console.log("All entries retrieved");
            console.log("the data form.name is " + data);
            console.log("the data is " + data.length);
            return data.length;

        }

    }

    store.openCursor().onerror = event => {
        console.log("Error in getting all data " + event.target.errorCode);
    }

};

export { getAllData } ;

a.js

import { getAlldData } from './db.js'

(() => {

function getIndex() {
    let formData = getAllData();    
    console.log("the counter is " + formData); // shows formData as undefined
}
}

)();

a.jsformData中db.jsgetAllData()的返回值是否可以得到?它们在db.js中正确地记录了console.log

cbjzeqam

cbjzeqam1#

我看到你用回调函数使它工作了。下面是一个使用promise的例子。

export function getAllData() {
  return new Promise((resolve, reject) => {
    let data = [];
    let store = db.transaction("forms").objectStore("forms");

    const request = store.openCursor();
    request.onsuccess = (event) => {
      let cursor = event.target.result;
      if (cursor) {
        data.push(cursor.value);
        cursor.continue();
      } else {
         resolve(data);
      }
    };

    request.onerror = event => {
      reject(new Error('Error getting all data'));
    };
  });
}

// and then to use it in another module you do this:

import { getAllData } from 'file';

getAllData().then(data => {
  console.log('loaded %d rows', data.length);
  for (const row of data) {
    console.log('row of data:', JSON.stringify(row));
  }
}).catch(error => {
  console.log('got an error :( - ', error.message);
});

相关问题