问题标签 [dart-async]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
108 浏览

dart - Dart 库瀑布原理,如来自 caolan 的异步

早些时候,我是一名 javascript 程序员,我使用来自 caolan 的库 async 来防止回调地狱异步库

在这些天里,我转向了 dart,异步风格与 javascript 中的风格非常相似。我真的很喜欢 async.waterfall 函数,我可以按顺序执行带有回调的函数。

我怎么能在飞镖中做到这一点?他们有类似的 dart 库可用吗?

0 投票
1 回答
46 浏览

dart - 使用 completeError 传递抛出的错误

我尝试编写一个将记录插入 mongodb 的应用程序。
先看看我的测试:

这个测试应该失败,因为密码不够强。以及尝试插入记录的代码。

}

这种分配会抛出错误,因为密码不符合安全要求。

这部分应该捕获错误并完成它。

但在测试中,我得到了 NoSuchMethodError。为什么在这里,错误对象没有传递给测试?我在这里做错了什么?在此处输入图像描述

0 投票
2 回答
1070 浏览

dart - 等待我的班级初始化(或如何等待 Future 完成)?

Dart 中的期货是我存在的祸根。

我有一个类,它调用异步(未来)函数来启动数据库实例,如下所示:

这在服务器端工作正常,因为当服务器第一次启动时,数据库被初始化。当用户实际尝试登录时,数据库已经初始化并且一切正常。但是,当我尝试为此创建集成测试时,这会惨遭失败。当我创建类时,数据库尚未初始化,因此运行 AttemptLogin 例程失败。

更糟糕的是,代码使用了 Dart DI 框架,因此我实际上无法直接控制 DataManager 类的初始化。这是该类的实际设置:

然后这是测试登录功能的调用,最终调用了失败的尝试登录函数:

如何处理数据库初始化的异步性质并仍然进行模拟测试?具体来说,有没有办法强制尝试登录()未来以某种方式等待 DataManager 类初始化的完成?

谢谢你的帮助,格雷格

0 投票
1 回答
825 浏览

dart - 如何从内部函数/流侦听器中返回函数值?

我正在 dart 中编写一个函数,该函数将从浏览器端的索引数据库中删除一个对象,当我发现我必须从内部函数中返回一个外部函数值时:

此函数是我用来保存和加载到索引数据库的类的方法。当删除操作成功或失败时,我希望此函数返回trueorfalse或包含相同内容的 Future 对象。但是,瓶颈在于os.delete(_key);语句:它返回一个未来,但删除操作的实际成功或失败由tx.onCompleteand提供tx.onError。这两个对象都是流,所以我需要创建匿名函数来处理来自它们的事件:

如您所见,当我创建匿名函数时,return 语句不再完成方法,而是内部函数。我可以让内部函数调用其他函数,但是那些其他函数有自己的 return 语句,它们不会将结果返回给整个方法。

我尝试了设置临时变量并定期检查它们的方法,但这是一个非常不雅的解决方案,我不想使用它,不仅是为了潜在的错误,而且因为它会占用单线程事件循环。

是否可以从内部函数向外部函数返回值?还是有其他更好的方法可以从一组流中事件的存在或不存在中获取值?还是有另一种使用 IndexedDB 的方法可以避免这个问题?

0 投票
5 回答
5947 浏览

dart - How do I create a blank Future in Dart + how do I return a future currently in progress?

I'm trying to create a server-side Dart class that performs various data-related tasks. All of these tasks rely on the database having been first initialized. The problem is that the init of the database happens asynchronously (returns a Future). I first tried to put the init code into the constructor, but have given up on this approach as it seems to not be viable.

I am now attempting to figure out how to force the DB initialization as a first step in any method call that accesses data. So in other words, when attemptLogin() is called below, I'd like to first check if the DB has been initialized and initialize it if necessary.

However, there are two obstacles. If the database hasn't been initialized, the code is straightforward - initialize the db, then use the then() method of the returned future to do the rest of the function. If the db is not yet initialized, what do I attach my then() method to?

Second related question is what happens when a database is currently being initialized but this process is not yet complete? How can I pull in and return this "in-progress" Future?

This is the basic gist of the code I'm trying to wrangle:

Thanks in advance for your help,

Greg

0 投票
1 回答
145 浏览

dart - 尝试关闭池和查询时出现套接字错误

关闭查询后很快关闭池时出现此异常:

问题似乎是查询关闭在内部触发了 Future ,因此 close() 函数在关闭实际完成之前返回:

池关闭立即发生,它立即关闭套接字。这意味着查询关闭(由于 Future 而延迟到池关闭之后)失败,无法通过套接字发送它需要的任何信息。我已经在https://github.com/jamesots/sqljocky/issues/44打开了一张 sqljocky 的票,但我没有收到任何回复,如果需要一段时间才能得到回复,我需要一个解决方法。

这段代码允许我 100% 地复制问题:

0 投票
1 回答
173 浏览

dart - 如何在一个 HTML 中执行两个飞镖代码

我正在尝试构建一个 Dart 应用程序。

这是我想要的过程。

在第一次连接时,用户有一个加载页面。在此期间,他有一个动画,并且在后台下载了大 dart 文件(来自 dart2js for dart)。

一旦结束,下载的脚本就会执行,应用程序就可以开始工作了。

关于这个过程的可能性的任何想法?

谢谢你。编辑:

测试.dart

0 投票
3 回答
626 浏览

model-view-controller - 在 Dart 中修改实例变量的回调函数的范围

虽然这类问题经常被问到,但我认为我有一个更具体的限制,使问题变得更有趣。我正在使用 MVC 模式在 Dart 中编写客户端应用程序。我的目标很简单:监听按钮的点击,触发对后端 API 的异步请求,并将该数据呈现给用户。

至少,我有一个模型、视图和控制器类。模型类实现了发出请求并捆绑它接收到的数据的方法。视图类将感兴趣的 DOM 子树作为一个字段,并实现了操作其中元素的方法。控制器具有每个模型和视图类的单个实例作为其字段,并在视图元素上注册事件处理程序。控制器的事件处理程序触发对模型的调用以发出请求并返回数据,然后将其传递给视图进行渲染。

当我尝试将异步请求中的传入数据捕获到模型的实例变量中时,就会出现问题。我想把所有东西都很好地封装起来(这就是我首先使用 Dart 的原因),并且我想避免使用全局变量来保存来自异步请求的数据。我当前布局的一个最小示例如下所示。为了清楚起见,我在这里公开了所有字段和方法。

我看到的错误涉及所有这一切结束时出现的model.dataList领域。null我的第一个脸红是我不了解回调函数的范围。我最初理解它的方式是,回调将在请求数据到达时处理它,并在它准备好时设置实例变量。也许实例变量在回调范围内被别名和修改,但我要返回的变量从未被触及。

我曾考虑将一个Future对象传递给视图的一个方法,然后该方法将自行处理并将元素添加到 DOM 作为副作用。这种技术会破坏我的 MVC 设计(甚至比现在这个最小的工作示例中的破坏还要严重)。

我也很可能完全错误地使用异步编程。对此进行更多思考,我的异步调用毫无用处,因为我基本上view.update()在事件触发时在控制器中进行了阻塞调用。也许我应该将请求传递Future给控制器​​,并在then()触发事件处理程序时从那里触发请求的方法。

在 Dart 中,回调函数驻留在什么范围内,如何以最小的副作用和最大的封装从它们中获取数据?

NB 我讨厌详细讨论这个经常讨论的问题,但我已经阅读了以前对类似问题的回答,但无济于事。

0 投票
3 回答
392 浏览

dart - DART:如何在属性对象上分配 httpRequest 的结果?

我想在一个对象属性(my_json)中保存一个从外部文件加载的 JSON 列表。使用此代码 my_json 属性始终等于 null :{

在此先感谢您的帮助 :)

0 投票
2 回答
199 浏览

mongodb - NoSuchMethodError after calling Future twice

I've a simple method which fetches some data from MongoDB:

It's working if I'm calling this method once. Calling it twice in a row results in a NoSuchMethodError: method not found: 'query'.

Could anyone explain the problem?

Here is the full stacktrace:

I opened a issue for mongo_dart.