Javascript 继续之前,请等待对Dexie表查找的响应
我正在使用一个名为bugout的库(这是一个基于webtorrent构建的API)来创建一个P2P文件室,但我需要它根据使用Dexie的表查找的值来创建文件室 我知道这已经在堆栈溢出上被重复了一百万次,但是我仍然难以理解承诺或异步等待函数的概念。我需要在该值可用之前停止bugout操作。但我也不想陷入地狱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})
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)如果你想用我更新的代码添加答案,我很乐意将其标记为答案。我知道我的问题没有达到所有的指导原则,但你让我达到了我需要的位置,答案可能会帮助其他人……我有编写代码的能力,只是将其设置为房间变量是错误的方法。