等待异步lambda函数gjs

时间:2020-04-09 11:24:52

标签: gjs

我正在尝试使异步调用在下面(它们是异步的,因为外部API,而不是我的设计)按顺序运行,现在我设法让foo的调用函数来等待它,但是我遇到了麻烦等待foo2,因为我在异步行上收到以下错误

参数列表后的JS错误:语法错误:缺少

我想念什么?

ps:还有一种比设置全局变量并从外部访问它更好的方式从回调中“返回”值吗?

 foo2(par2) {
        return new Promise((resolve, reject) => {
            par2.asyncfun(
                null, this.callback.bind(this, par2));
        });
    }
ls = eval(input("Input a list:"))
lss = list(set(ls))
print(lss)

提前谢谢

1 个答案:

答案 0 :(得分:1)

我认为您只是想在一个承诺中做太多事情:

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的主要目的之一是避免复杂的回调嵌套。通常,应该将功能链分解为单独的Promises,然后await一个接一个地连接。