Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 继续之前,请等待对Dexie表查找的响应_Javascript_Dexie - Fatal编程技术网

Javascript 继续之前,请等待对Dexie表查找的响应

Javascript 继续之前,请等待对Dexie表查找的响应,javascript,dexie,Javascript,Dexie,我正在使用一个名为bugout的库(这是一个基于webtorrent构建的API)来创建一个P2P文件室,但我需要它根据使用Dexie的表查找的值来创建文件室 我知道这已经在堆栈溢出上被重复了一百万次,但是我仍然难以理解承诺或异步等待函数的概念。我需要在该值可用之前停止bugout操作。但我也不想陷入地狱 var room = db.profile.get(0, function (profile) {var ffname = profile.firstName;return ffname})

我正在使用一个名为bugout的库(这是一个基于webtorrent构建的API)来创建一个P2P文件室,但我需要它根据使用Dexie的表查找的值来创建文件室

我知道这已经在堆栈溢出上被重复了一百万次,但是我仍然难以理解承诺或异步等待函数的概念。我需要在该值可用之前停止bugout操作。但我也不想陷入地狱

var room = db.profile.get(0, function (profile) {var ffname = profile.firstName;return ffname})
console.log(ffname) //returns undefined
var b = new Bugout(ffname);
我也试过:

var room = db.profile.get(0, function (profile) {var ffname = profile.firstName;return ffname})
console.log(room) //returns undefined
var b = new Bugout(room);

我如何才能用尽可能少的代码返回ffname,而不陷入一堆将我锁定在API之外的匿名或异步函数中?

最简单的方法是:

异步函数getBugoutFromId(id){ var profile=await db.profile.get(id); var ffname=profile.firstName; console.log(ffname) var b=新的错误(ffname); 返回b; } 如果您希望在不使用async/await的情况下使用承诺,请执行以下操作:

function getBugoutFromId(id) {
  return db.profile.get(id).then(profile => {        
    var ffname = profile.firstName;
    console.log(ffname)
    var b = new Bugout(ffname);
    return b;
  });
}
这两个函数的工作原理相同。它们中的任何一个都会依次返回一个承诺,所以当您调用它时。因此,无论您将如何处理检索到的Bugout实例,您都需要处理您自己的函数以与处理Dexie的承诺相同的方式返回的承诺

async function someOtherFunction() {
   var bugout = await getBugoutFromId(0);
   console.log ("Yeah! I have a bugout", bugout);
}
或者,如果您不喜欢使用异步/等待:

function someOtherFunction() {
   return getBugoutFromId(0).then(bugout => {
     console.log ("Year! I have a bugout", bugout);
   });
}

这就是回调的目的。您不能从异步调用返回。把逻辑放在代码中你有返回权的地方好的。。所以我需要这个
var-room=db.profile.get(0,函数(profile){var-ffname=profile.firstName;var-b=newbugout(ffname);})
这就是我需要的!完美的非常感谢你<代码>db.profile.get(0,函数(profile){var ffname=profile.firstName;var b=newbugout(ffname)如果你想用我更新的代码添加答案,我很乐意将其标记为答案。我知道我的问题没有达到所有的指导原则,但你让我达到了我需要的位置,答案可能会帮助其他人……我有编写代码的能力,只是将其设置为房间变量是错误的方法。