在继续之前等待对 Dexie table 查找的响应
Wait for a response to a Dexie table lookup before proceeding
我正在使用一个名为 bugout 的库(它是一个 API 建立在 webtorrent 上)来创建一个 P2P 房间,但我需要它来根据 table 的值创建房间使用 Dexie 查找。
我知道这已在 Stack Overflow 上重复了一百万次,但我仍然无法理解 promises 或异步等待函数的概念。在该值可用之前,我需要错误操作才能继续。但我也不想陷入回调地狱。
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 之外?
最简单最简单的方法是这样的:
async function getBugoutFromId(id) {
var profile = await db.profile.get(id);
var ffname = profile.firstName;
console.log(ffname)
var b = new Bugout(ffname);
return b;
}
如果您更喜欢在不使用 async/await 的情况下使用 promises,请执行以下操作:
function getBugoutFromId(id) {
return db.profile.get(id).then(profile => {
var ffname = profile.firstName;
console.log(ffname)
var b = new Bugout(ffname);
return b;
});
}
这两个函数的工作原理相同。它们中的任何一个 returns 依次是一个 promise,所以当你调用它时。因此,无论您要对检索到的 Bugout 实例做什么,都需要以与处理 Dexie 的承诺相同的方式处理您自己的函数 returns 的承诺。
async function someOtherFunction() {
var bugout = await getBugoutFromId(0);
console.log ("Yeah! I have a bugout", bugout);
}
或者如果您不想使用 async/await:
function someOtherFunction() {
return getBugoutFromId(0).then(bugout => {
console.log ("Year! I have a bugout", bugout);
});
}
我正在使用一个名为 bugout 的库(它是一个 API 建立在 webtorrent 上)来创建一个 P2P 房间,但我需要它来根据 table 的值创建房间使用 Dexie 查找。
我知道这已在 Stack Overflow 上重复了一百万次,但我仍然无法理解 promises 或异步等待函数的概念。在该值可用之前,我需要错误操作才能继续。但我也不想陷入回调地狱。
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 之外?
最简单最简单的方法是这样的:
async function getBugoutFromId(id) {
var profile = await db.profile.get(id);
var ffname = profile.firstName;
console.log(ffname)
var b = new Bugout(ffname);
return b;
}
如果您更喜欢在不使用 async/await 的情况下使用 promises,请执行以下操作:
function getBugoutFromId(id) {
return db.profile.get(id).then(profile => {
var ffname = profile.firstName;
console.log(ffname)
var b = new Bugout(ffname);
return b;
});
}
这两个函数的工作原理相同。它们中的任何一个 returns 依次是一个 promise,所以当你调用它时。因此,无论您要对检索到的 Bugout 实例做什么,都需要以与处理 Dexie 的承诺相同的方式处理您自己的函数 returns 的承诺。
async function someOtherFunction() {
var bugout = await getBugoutFromId(0);
console.log ("Yeah! I have a bugout", bugout);
}
或者如果您不想使用 async/await:
function someOtherFunction() {
return getBugoutFromId(0).then(bugout => {
console.log ("Year! I have a bugout", bugout);
});
}