gjs - 等待异步 lambda 函数 gjs
问题描述
我试图让异步调用如下(它们是异步的,因为外部 API,而不是我的设计)按顺序运行,现在我设法让 foo 被它的调用函数等待,但我在等待 foo2 时遇到了麻烦因为我在异步线上收到以下错误
JS ERROR: SyntaxError: missing ) 在参数列表之后
我错过了什么?
ps:还有比设置全局变量并从外部访问它更好的方法来“返回”回调中的值吗?
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
它们一个接一个地分解。
推荐阅读
- j - J中有类似“初始化”的东西吗?
- python - 如何根据当地时区和夏令时获取 UTC + x 数字?
- android - 您可以从网站(在 chrome 中)打开 Google Play 电影(不是存储)到特定电影吗?
- documentation - 温莎城堡参考文档
- c# - 获取所有用作泛型类型参数的类型
- amazon-web-services - 即使禁用离线,AWS AppSync 查询也会返回缓存响应
- java - Spring Boot和Mybatis项目中多个数据源出现NoUniqueBeanDefinitionException
- python - 从 CSV 文件重命名 Python 中的 PDF 的问题
- xaml - 如何在 Xamarin 中重用相同的视图?XAML
- c# - 从 DataTemplate 设置 ItemsControl 中项目的 ZIndex