当前位置:首页 > 日记 > 正文

javascript异步函数的开发

javascript异步函数的开发
异步Javascript的演进梳理了Javascript异步函数的开发过程。首先,它通过实现异步回调函数,然后经历了诺言/ +和发电机的功能,并在未来的异步功能。由于景壮的这篇文章的翻译,这是如下:

现在,让我们回顾一下多年来Javascript异步函数的发展。

回调函数回调

似乎一切都应该从回调函数开始。

异步Javascript

我们都知道,在Javascript中,异步编程风格只有公民能作用于Javascript语言来完成的:这意味着我们可以把一个函数作为另一个函数的参数,在这个函数可以在函数调用中传递(即回调函数)。这就是为什么回调函数:如果你是天生的将一个函数作为另一个函数的参数(当它被称为一个高阶函数),然后你就可以调用这个函数内部的函数来完成相应的任务。回调函数不返回值(不要尝试使用返回),仅用于在函数执行某些操作。看看一个例子:

Something.save(功能(ERR){)
如果(错误){
错误处理
返回;没有返回值
}
console.log(''成功');
});
在上面的例子中,我们展示了一个错误,第一次回调与错误的优先级,这是一个对Node.js本身的特点。所有的核心模块在Node.js和大多数模块在NPM仓库将遵循这一特征的时候写的。

过度使用回调函数的挑战:

如果你不能合理地组织代码,那么很容易引起回调,这使得你的代码很难被别人理解。

很容易忽略错误处理代码。
不能使用返回语句返回值,不能使用抛出关键字。
正是由于这些原因,Javascript世界一直在寻找可行的解决方案,从而使得异步Javascript的开发变得更加简单。

其中的一个可行的解决方案是异步模块。如果你做生意和回调函数打了很长一段时间,你会深深地感到,在Javascript中如果你想让事情并行或串行实现,即使使用异步函数映射(映射)使用异步函数的数组元素更加复杂。所以,谢谢Caolan McMahon写的异步模块来解决这些问题。

与异步模块,你可以按下面的方式写代码:
Async.map({ 1, 2, 3 },AsyncSquaringLibrary.square,
函数(错误,结果){
将是结果{ 1, 4, 9 }
});
The async module, to some extent, has brought convenience, but it is still not easy enough and the code is not easy to read, so Promise appears.

承诺

目前Javascript异步标准可以追溯到2012,它没有成为直到6。然而,长期的承诺不通过Javascript社区发明的。这个词来自Daniel P.friedman在1976发表的一篇文章。

承诺表示异步操作的最终结果。

现在我们使用承诺来完成上面代码所完成的任务,并且承诺样式代码如下所示:
Something.save()
然后(函数(){())
console.log(''成功');
})
catch(函数(){())
错误处理
})

在回调中,回调函数也被使用,在catch和catch方法中引入回调函数,分别在承诺满足和拒绝时执行,另一个优点是它可以链接完成一系列的任务:
SaveSomething()
然后(updateotherthing)。
然后(deletestuff)。
然后(logresults);
当你没有一个现成的承诺,你可能需要使用一些承诺的图书馆,和一个受欢迎的选择是使用蓝鸟。这些图书馆可以提供的功能比本地解决方案的更多,不限于受许指定的功能/ +标准。

但是你为什么不使用糖的方法呢建议您先阅读承诺这篇文章:扩展问题。

您可能会问:如果大多数库只公开回调接口,那么如何使用诺言呢

这是非常简单的,此时惟一需要做的就是使用回调函数包装回调函数:

代码的回调样式可能如下所示:
功能savetothedb(值){
Db.values.insert(价值、功能(呃,用户){
如果(错误)抛出错误;

将用户插入到:
});
}
现在我们将它转换为支持承诺样式调用的代码:
功能savetothedb(值){
返回新的承诺(函数(解析,拒绝){
Db.values.insert(价值、功能(呃,用户){ / /记住错误第一;)
如果(错误){
返回拒绝(错误);请不要忘记返回这里。
}
解析(用户);
})
}
}
已经有两种方式来支持回调风格的同时提供相当数量的库或框架,保证风格的API接口。所以现在,如果你想去外面的世界提供了一个图书馆,最好的做法是同时提供两个接口。你可以用以下方式为了实现这一目标:
函数(CB){
如果(CB){
返回CB();
}
返回新的承诺(函数(解析,拒绝){

});
}
或者更简单,你可以从界面,只提供承诺的风格开始,和使用像callbackify工具实现向后兼容性的目的。事实上,Callbackify也同样是上面的代码片段,但它采用更一般的方法实现。我建议你读callbackify源代码。

发电机发电机/产量

Javascript生成器是一个相对较新的概念,这是6新功能(也被称为es2015)。想象这样一个场景:

当你执行一个函数时,你可以在某个时刻暂停函数的执行,然后做一些其他的工作,然后返回这个函数,继续执行,甚至执行一些新的值,然后继续执行。

上面描述的场景正是Javascript函数发生器是专门的问题。我们称之为发电机的功能时,它不会立即执行,但需要我们进行迭代操作(接法)手动,你调用生成函数,它返回给你一个迭代器迭代器遍历每个休息点。
函数*(){
var指数= 0;
当(索引< 2){
收益率指数+ /暂停功能,收益率操作后
}
}
var(bar);返回实际上是一个迭代器。
Console.log((酒吧。下)); / / { 0 },价值:假
Console.log((酒吧。下)); / / { 1 },价值:假
Console.log((酒吧。下); / /定义):{ },真正的价值:
此外,如果您希望使用生成器函数更容易编写异步Javascript代码,我们可以使用联合库。CO是著名的TJ神写的。

公司是一个基于发电机Node.js和浏览器的过程控制工具。有了承诺,您可以以更优雅的方式编写非阻塞代码。

使用前面示例代码的CO,我们可以使用以下代码重写:
函数(*){()
Yield Something.save();
}。然后(函数(){)
成功
})
catch(函数(错误){)
错误处理
});
你可能会问:你如何并行操作答案可能比你想象的要简单,如下所述(实际上是承诺):
{ something.save产量(),Otherthing.save()};
异步/等待
异步函数的概念引入ES7(尚未正式标准化)。如果你想使用它,你可以把它变成ES5代码语法转换器通天手段。(提醒:我们现在谈论的是async关键字,而不是在NPM异步封装)。

总之,与异步关键字,你可以很容易地实现所做的工作,在使用发电机和有限的功能。当然,除了黑客。

也许你会问,如果产量不如果你在ES7具有异步关键词如此重要

事实上,异步使用收益率只是一个漏洞,收益率意味着懒惰的顺序(懒惰的序列)和迭代器。首先,让产量使用它的最初用途,然后使用等待执行异步操作。

在这背后,异步功能实际上使用的承诺,这就是为什么异步函数返回一个承诺。

因此,我们使用异步函数做的工作是类似以前的代码,你可以重写代码,用下面的方法:
异步功能保存(某物){
{试
等待(保存某物);等待等待后面的代码执行,类似于收益率。
} catch(前){
错误处理
}
console.log(''成功');
}
你可以看到,使用异步功能,你需要在函数声明的前面加上异步的关键。之后,您可以使用等待函数内的关键词,这是类似于以前的产量。

使用异步函数来完成并行任务是学会非常相似。唯一不同的是,promise.all不再隐。
异步功能保存(某物){
等待的承诺。所有{ Something.save()()、Otherthing.save()}
}
膝关节骨性关节炎也支持异步功能,如果你使用的是膝关节骨性关节炎,现在你可以使用这个功能与巴别塔的帮助。
从进口膝关节骨性关节炎膝关节骨性关节炎;
让应用程序= KOA();
app.experimental =真;
app.use(异步函数(){)
this.body =等待promise.resolve(读者你好!!)
})
(3000)app.listen;
以上内容共享javascript异步函数开发过程,希望对您有所帮助。

相关文章

如何把繁体字转换成词的技巧是一个

如何把繁体字转换成词的技巧是一个

繁体字,是一个,转换成,简单,技巧,以下是关于传统的汉字词为一个简化的方法,希望对你有用萧边整理! 如何把繁体字译成简体汉字 如何将word文档转换成简化的快速文件,您可以使用第三方软件,但只能使用word文档,请使用下面的方法查看一下。 操作…

PS合成未来游戏场景充满科幻小说

PS合成未来游戏场景充满科幻小说

科幻小说,场景,未来,游戏,电脑软件,本教程将介绍PS到未来的游戏场景充满科幻小说。这景色很美,也不大。作者详细地介绍了它,并推荐了它。让我们一起学习。 随着游戏风格的多样化,作品中的主要视觉设计风格有很多种,今天我们举一个例子向您解释…

国庆节的国庆节钻石火焰PS图象处理

国庆节的国庆节钻石火焰PS图象处理

软件设计,图象处理,国庆节,火焰,电脑软件,许多朋友不做钻石。萧边今天给我们带来的国庆节钻石火焰的设计,这是由PS图象处理软件设计制造。像你的朋友一样,你可以一起学习。 钻石的个性非常华丽,火焰的性格非常热情。两者结合的效果如何下面我…

PS制作漂亮的七色羽毛粉丝GIF动画

PS制作漂亮的七色羽毛粉丝GIF动画

动画,羽毛,漂亮,电脑软件,PS,本教程是介绍一个朋友给PS制作漂亮多彩的七彩羽毛扇GIF动画的方法。本教程制作的羽毛扇非常漂亮,方法非常简单。非常适合初学者学习。推荐朋友一起学习。 今天,萧边给我们带来了PS制作漂亮,五彩斑斓的羽毛扇,GIF动…

PS图象处理软件复制一个梦幻般的明

PS图象处理软件复制一个梦幻般的明

图象,处理软件,梦幻般,海报,电脑软件,我以前教过你很多海报教程。今天,萧边继续带给你一个梦想的星星。很漂亮。你最喜欢的朋友可以一起学习。 临摹是最好的学习方法,然而,在你临摹之前,你必须仔细观察和分解作品,然后根据你的喜好找到相似的材…

PS设计简单的动态立体图

PS设计简单的动态立体图

动态,立体图,简单,电脑软件,PS,本教程是一个简单的朋友动态立体图的方法PS的设计简介。本教程设计的立体地图非常好。非常适合初学者学习。推荐朋友一起学习。 有许多方法来设计立体图。今天,共享PS的简单和动态立体图的方法是画出深度。有…

ps制作逼真的表面反射效果

ps制作逼真的表面反射效果

反射,逼真,表面,效果,电脑软件,本教程介绍了一个朋友,PS创建逼真的水反射效果。教程产生的效果非常好。建议喜欢的朋友可以和教程一起学习。 APS在特殊的魔法有很多功能,有时强大的法师甚至可以在同一时间,由于PS的应用,使我们可以完成许多我们…

PS图象处理软件的手绘效果一千骨的

PS图象处理软件的手绘效果一千骨的

照片,手绘,图象,处理软件,效果,PS图象处理软件把花骨的照片,美丽的眼泪和手绘效果。本教程适用于一定的艺术基础,对手绘有一定的了解。但是这个教程真的很好。推荐。让我们一起学习。 本教程主要使用PS图象处理软件将花骨的照片,美丽的眼泪和…

Python爬虫类正则表达式的常用符号

Python爬虫类正则表达式的常用符号

爬虫类,方法,正则表达式,符号,常用,正则表达式不是Python的一部分,正则表达式是处理字符串的强大工具。它有自己独特的语法和独立的处理引擎。它可能不像STR本身那样高效,但是它的功能非常强大,因此,在正则表达式中,正则表达式的语法是相同的。…

QQ搞笑签名经典语句搞笑个性签名

QQ搞笑签名经典语句搞笑个性签名

语句,搞笑,个性签名,经典,电脑软件,每天看到QQ签名,那是很犀利的!有时候,一句话一句话很酷,酷而尖锐,所以萧边介绍一些搞笑的qq签名经典语句在这里,供大家参考 1。布莱克一家去看恐怖电影,他们都变白了! 2,生活浪费空气,浪费土地,浪费一半的人民币! 3,姐…

有趣的签名超级拖船推荐滑稽人格签

有趣的签名超级拖船推荐滑稽人格签

推荐,拖船,滑稽,人格,有趣,你想有一个有特色的QQ签名吗你想引起别人的注意吗这是QQ签名显示这个个性的地方。萧边在这里为你提供一些参考超有趣搞笑签名。 1,卖花女带我,说:大哥,花,看你是人。 2。我认识的人越多,我喜欢的动物就越多。 3,这个人的…

excel如何在excel上实现文本垂直排

excel如何在excel上实现文本垂直排

排列,文本,如何在,电脑软件,excel,在Excel表格中,我们可以使用一些效果和样式来制作更详细的表单,例如:文本垂直排列。 打开Excel表格,然后右击选择垂直排列的单元格; 选择在弹出框中设置单元格格式;选择对齐; 右击可选择设置单元格格式; (3)在右边的…