等待异步 lambda 函数 gjs
Await on an async lambda function gjs
我正在尝试按顺序对 运行 进行下面的异步调用(它们是异步的,因为外部 API,不是我的设计),现在我设法等待 foo通过它的调用函数,但我在等待 foo2 时遇到了麻烦,因为我在异步行
上收到以下错误
JS 错误:语法错误:参数列表后缺少 )
我错过了什么?
ps: 还有比设置全局变量并从外部访问它更好的方法 "return" 来自回调的值吗?
foo(nick) {
return new Promise((resolve, reject) async () => {
async_foo(par, [],
(c, res) => {
let par2;
try {
par2 = c.somefun(res);
} catch (e) {
logError(e, `Some error`);
return;
}
let output = await this.foo2(par2);
resolve(output);
});
});
}
foo2(par2) {
return new Promise((resolve, reject) => {
par2.asyncfun(
null, this.callback.bind(this, par2));
});
}
提前致谢
我认为你只是想在一个 Promise 中做太多事情:
async function(nick) {
let res1 = await new Promise((resolve, reject) => {
async_foo(par, [], (c, res) => {
try {
resolve(async_foo_finish(res));
} catch (e) {
reject(e);
}
});
});
return new Promise((resolve, reject) => {
res1.asyncfunc(null, (obj, res) => {
try {
resolve(obj.asyncfun_finish(res));
} catch (e) {
reject(e);
}
});
});
}
foo('something').then(output => {
log('output');
}).catch(e => {
logError(e);
});
很难给出好的建议,因为你没有展示真正的功能。
Promises/async-await的主要目的之一是避免复杂的回调嵌套。通常,您应该将函数链分解为单独的 Promise,然后 await
一个接一个地
我正在尝试按顺序对 运行 进行下面的异步调用(它们是异步的,因为外部 API,不是我的设计),现在我设法等待 foo通过它的调用函数,但我在等待 foo2 时遇到了麻烦,因为我在异步行
上收到以下错误JS 错误:语法错误:参数列表后缺少 )
我错过了什么?
ps: 还有比设置全局变量并从外部访问它更好的方法 "return" 来自回调的值吗?
foo(nick) {
return new Promise((resolve, reject) async () => {
async_foo(par, [],
(c, res) => {
let par2;
try {
par2 = c.somefun(res);
} catch (e) {
logError(e, `Some error`);
return;
}
let output = await this.foo2(par2);
resolve(output);
});
});
}
foo2(par2) {
return new Promise((resolve, reject) => {
par2.asyncfun(
null, this.callback.bind(this, par2));
});
}
提前致谢
我认为你只是想在一个 Promise 中做太多事情:
async function(nick) {
let res1 = await new Promise((resolve, reject) => {
async_foo(par, [], (c, res) => {
try {
resolve(async_foo_finish(res));
} catch (e) {
reject(e);
}
});
});
return new Promise((resolve, reject) => {
res1.asyncfunc(null, (obj, res) => {
try {
resolve(obj.asyncfun_finish(res));
} catch (e) {
reject(e);
}
});
});
}
foo('something').then(output => {
log('output');
}).catch(e => {
logError(e);
});
很难给出好的建议,因为你没有展示真正的功能。
Promises/async-await的主要目的之一是避免复杂的回调嵌套。通常,您应该将函数链分解为单独的 Promise,然后 await
一个接一个地