我正试图让下面的异步调用(它们是异步的,因为有一个外部API,而不是我的设计(按顺序运行,现在我设法让它的调用函数等待foo,但我在等待foo2时遇到了困难,因为我在异步行上遇到了以下错误
JS错误:参数列表后缺少SyntaxError:(
我错过了什么?
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);
});
很难给出好的建议,因为你没有表现出真正的功能。
Promise/async-await的主要目的之一是避免复杂的回调嵌套。通常,您应该将函数链分解为单独的Promise,然后一个接一个地await
它们。