#2025·async

使用队列中的异步函数获取结果的正确方式

作者: niclasek创建于 2025年3月7日更新于 2025年3月7日

哈罗 首先,谢谢你的这个伟大的图书馆!

这不是一个问题,而是一个问题。

我使用“ 同步” 中的队列功能来进行数据库交易 。 以下是我目前如何使用它的例子:

zz
从“sync”导入{队列,队列对象};

类型 QueTask = {名称:字符串};

导出类 AsyncLabWithout 动作 {
私密静态   交易队列: 等同对象 > ;

私有静态 init (): 无效{
AsyncLabWithout AsyncFunction.  ContractionQue = 队列\\ ueue task, 字符串, 错误> ((任务: QueetTask, callback): 无效 {{
尝试{
调用我的名InUpperCase:字符串 = this.name InUpperCase(任务名) ;
回调( null, myName InUpperCase) ;
{\fn华文楷体\fs16\1cHE0E0E0}抓住(err){
回调( null, "error" );
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
* 1个);
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

静态音效( name In LowerCase: string): 保证 < string > {
如果( AsyncLabWithout Async Function.  交易语句 = 无效) {
AsyncLabWithout Async Function.init () (中文(简体) ).
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

返回新承诺 < 字符串> (( 解析) #{{ {
尝试{
AsyncLabWithout AsyncFunction.  ContractionQuee.push({名:In LowerCase)}, (err, 答复: 字符串){{
a. 控制台.log(`答复=${答复});
control.log( “ name = ${name In LowerCase} ) ;
解析(答复);
* ;
{\fn华文楷体\fs16\1cHE0E0E0}抓住(err){
解析( null) ;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
* ;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

静态名称 InUpperCase( name In LowerCase: string): 字符串 {
返回名称 inLowwerCase. to UpperCase () ;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

现在,我需要更新我的代码 传递一个sync函数 到队列, 其中召回没有通过。 文献资料:

使用 ES2017 合成函数 Async 接受 Async 函数,只要我们接受节点风格的回调函数。 然而,我们不给他们回调,而是使用返回值处理任何承诺的拒绝或错误。

我努力寻找一种方法来取回数据库交易的结果,但我想我找到了一个解决方案,在推入队列时添加了‘.when(召回)':

[TypeScript] 从“sync”导入{队列,队列对象};

类型 QueTask = {名称:字符串};

导出类 AsyncLabWith Async 函数{ 私密静态 交易队列: 等同对象 > ;

私有静态 init (): 无效{ AsyncLabWith Async Function. ContractionQuee = 队列(任务: 队列任务): 承诺 < string > {{ 尝试{ 召集我的名InUpperCase:字符串=等待此名. NameInUpperCase(任务.name) ; 返回我的名为 InpperCase; {\fn华文楷体\fs16\1cHE0E0E0}抓住(err){ 返回“错误”; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

  • 1个); {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

静态音效( name In LowerCase: string): 保证 < string > { 如果( AsyncLabWith Async Function. 交易排行榜 = 无效) { AsyncLabWith Async Function.init( ); 互联网档案馆的存檔,存档日期2011-12-21. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

返回新承诺 < 字符串> (( 解析) #{{ { 尝试{ AsyncLabWith AsyncFunction. ContractionQuee.push({名:In LowerCase}).when ((答复:字符串){{{{} a. 控制台.log(`答复=${答复}); control.log( “ name = ${name In LowerCase} ) ; 解析(答复);

  • ; {\fn华文楷体\fs16\1cHE0E0E0}抓住(err){ 解析( null) ; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
  • ; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

静态名称 InUpperCase( name In LowerCase: string): 保证 < string > { . . . . . . .