首页 > 解决方案 > 等待异步 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));
        });
    }

先感谢您

标签: gjs

解决方案


我认为您只是想在一个 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它们一个接一个地分解。


推荐阅读