gpt4 book ai didi

callback - Dart:在继续之前等待回调

转载 作者:行者123 更新时间:2023-12-02 22:13:05 25 4
gpt4 key购买 nike

我想知道是否可以在继续处理之前等待回调。

我正在使用一个在内部处理 future 的库,如果成功,则进行回调,否则在内部处理错误而不进行回调。

现在我尝试使用此库创建一个实例,然后用随机测试数据填充它,然后更新该实体。

Map generateRandomizedInstance() {
lib.createEntity((result1){
result1["a"] = generateRandomA();
result1["b"] = generateRandomB();
result1["c"] = generateRandomC();
...
lib.updateEntity(result1, (result2){
// want to return this result2
return result2;
})
});
}

如果我只创建一个实体并更新一次,那就没问题,但我想创建大量随机数据:

ButtonElement b = querySelector("button.create")..onClick.listen((e){
for (int i = 0; i < 500; i++) {
generateRandomizedInstance();
}
});

由于回调返回的速度不够快,这段代码很快就会崩溃。

我尝试将方法签名更改为

generateRandomizedInstance() async { 

然后做:

for (int i = 0; i < 500; i++) {
print(await generateRandomizedInstance());
}

但是该等待语法似乎无效,并且我不完全确定如何在某种 future 中包装该回调代码,以便我可以等待回调返回,然后再继续循环的下一次迭代。

我在generateRandomizedInstance末尾尝试了一个while循环,等待结果变量不为空,但这会杀死浏览器,并且看到我并不总是得到回调,在某些情况下,它可能会导致无限循环。

关于如何在等待回调时暂停 for 循环有什么想法/建议吗?

最佳答案

这应该可以满足您的要求:

Future<Map> generateRandomizedInstance() {
Completer<Map> c = new Completer<Map>();
lib.createEntity((result1){
result1["a"] = generateRandomA();
result1["b"] = generateRandomB();
result1["c"] = generateRandomC();
...
lib.updateEntity(result1, (result2){
// want to return this result2
c.complete(result2);
})
});
return c.future;
}


ButtonElement b = querySelector("button.create")..onClick.listen((e) async {
for (int i = 0; i < 500; i++) {
await generateRandomizedInstance();
}
});

关于callback - Dart:在继续之前等待回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32761380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com