Javascript 从Dexie promise获得价值

Javascript 从Dexie promise获得价值,javascript,promise,dexie,Javascript,Promise,Dexie,正在尝试使用Dexie.JS获取以下函数返回的数据: function findEvent(key) { let snippet = ''; if (!db.isOpen()) { lastEvent = lastEvent.then(() => db.open()); } lastEvent = lastEvent.then(() => db.transaction('r', db.events, () => { db.events.each(

正在尝试使用
Dexie.JS
获取以下函数返回的数据:

function findEvent(key) {
  let snippet = '';
  if (!db.isOpen()) {
    lastEvent = lastEvent.then(() => db.open());
  }
  lastEvent = lastEvent.then(() => db.transaction('r', db.events, () => {
    db.events.each((element) => {
      let d = element.cause.data;
      if (d.hasOwnProperty('deleted') && (false == d.deleted) && d.hasOwnProperty('abbreviation') && 
        d.hasOwnProperty('contents') && (d.abbreviation == key)) {
          console.log(`found matching snippet for key: ${key}, contents: ${d.contents}`);
          snippet = d.contents;
      }
    }).then(() => {
      console.log('search callback returning:', snippet);
      return snippet;
    });
  }));

  return lastEvent;
}
我称之为:

  return findEvent(request.key).then((result) => {
    console.log(`findEvent return: ${result}`);
  });
显然,我做错了什么。我的承诺是按正确的顺序执行的。我从
findEvent
内部将
snippet
正确打印在日志中。当调用代码中记录了
result
时,它是
未定义的


有什么不同的做法吗?

您没有从
db.events.each
返回承诺,因此未定义的承诺会被传输到您的顶级承诺中。

我该怎么做?
返回db.events.each(…
是的,错过了那个。谢谢。说我可以在3分钟内接受。你太棒了,我会接受。如果
db.events。每个
返回一个承诺(看起来不像,但我不知道),那么你需要
返回db.events。每个
so
console.log('search callback returning:',snippet);
正确地记录了吗?