在内部回调中解析异步函数
Resolving async function within internal callback
当从函数中显式 returning 一个 new Promise
时,我们得到 resolve
和 reject
函数传入。我们可以随时在我们的函数中使用这些方法指示承诺的解决或拒绝,包括内部对其他函数的内部回调。
考虑:
const doSomeDbWork = function (db) {
return new Promise((resolve, reject) => {
db.doStuff(result => resolve(result));
});
};
当我们不能等待(就像这个数据库回调的情况)时,在没有显式 returning a new Promise
的情况下使用 async
是否有等效项?
const doSomeDbWork = async function (db) {
db.doStuff(result => /* ? */);
};
我目前认为这是不可能的,我只需要 return 一个新的 Promise。我错过了一个把戏吗?有办法吗?
Is there an equivalent when using async
without explicitly returning a new Promise
.
没有。 async
/await
只适用于承诺(或 thenables),你必须 promisify 其他一切 你自己 。在您的情况下,这很可能类似于
async function doSomeDbWork(db) {
return new Promise(db.doStuff);
}
或
async function doSomeDbWork(db) {
return new Promise(resolve => { db.doStuff(resolve); });
}
(可能在 return
后加上 await
)。
当从函数中显式 returning 一个 new Promise
时,我们得到 resolve
和 reject
函数传入。我们可以随时在我们的函数中使用这些方法指示承诺的解决或拒绝,包括内部对其他函数的内部回调。
考虑:
const doSomeDbWork = function (db) {
return new Promise((resolve, reject) => {
db.doStuff(result => resolve(result));
});
};
当我们不能等待(就像这个数据库回调的情况)时,在没有显式 returning a new Promise
的情况下使用 async
是否有等效项?
const doSomeDbWork = async function (db) {
db.doStuff(result => /* ? */);
};
我目前认为这是不可能的,我只需要 return 一个新的 Promise。我错过了一个把戏吗?有办法吗?
Is there an equivalent when using
async
without explicitly returning anew Promise
.
没有。 async
/await
只适用于承诺(或 thenables),你必须 promisify 其他一切 你自己 。在您的情况下,这很可能类似于
async function doSomeDbWork(db) {
return new Promise(db.doStuff);
}
或
async function doSomeDbWork(db) {
return new Promise(resolve => { db.doStuff(resolve); });
}
(可能在 return
后加上 await
)。