我已经将我的代码重组为承诺,并构建了一个由多个回调组成的精彩长扁平承诺链.then().最后我想返回一些复合值,并且需要访问多个中间承诺结果.但是,序列中间的分辨率值不在最后一个回调的范围内,我该如何访问它们?
function getExample() {
return promiseA(…).then(function(resultA) {
// Some processing
return promiseB(…);
}).then(function(resultB) {
// More processing
return // How do I gain access to resultA here?
});
}
Run Code Online (Sandbox Code Playgroud) 我最近一直在阅读很多关于函数式编程的东西,我可以理解它的大部分内容,但是我无法解决的一件事就是无状态编码.在我看来,通过删除可变状态简化编程就像通过删除仪表板来"简化"汽车:成品可能更简单,但运气好,使其与最终用户交互.
几乎我能想到的每个用户应用程序都将状态作为核心概念.如果您编写文档(或SO帖子),状态将随每个新输入而变化.或者,如果你玩视频游戏,有很多状态变量,从所有角色的位置开始,他们往往不断移动.如果不跟踪变化的价值,你怎么能做有用的事情呢?
每当我找到讨论这个问题的东西时,它都是用真正技术性的函数来编写的,它假设我没有大量的FP背景.有没有人知道一种方法可以向那些对命令式编码有良好,扎实理解的人解释这一点,但是谁在功能方面是完整的n00b?
编辑:到目前为止,一堆回复似乎试图让我相信不可变值的优点.我得到那个部分.这很有道理.我不明白的是,如何在没有可变变量的情况下跟踪必须改变和不断变化的值.
我对那些在编程中有关于无状态和有状态设计的具体信息的文章很感兴趣.我很感兴趣,因为我想了解更多,但我真的找不到任何关于它的好文章.我已经阅读了几十篇关于网络的文章,这些文章模糊地讨论了这个主题,或者他们谈论的是网络服务器和会话 - 这也是'有状态与无国籍的关系,但我对无状态与编码属性的有状态设计感兴趣.示例:我听说BL-classes在设计上是无状态的,实体类(或者至少我称之为Person(id,name,..))是有状态的等等.
我认为重要的是要知道,因为我相信如果我能理解它,我可以编写更好的代码(例如粒度).
无论如何,真的很短,这就是我所知道的'有状态对无国籍:
有状态(如WinForms):存储数据以供进一步使用,但限制了应用程序的可伸缩性,因为它受CPU或内存限制的限制
无状态(与ASP.NET一样 - 尽管ASP尝试使用ViewStates保持状态):操作完成后,数据将被传输,实例将被传回线程池(Amorphous).
正如您所看到的,它是非常模糊和有限的信息(并且非常关注服务器交互),所以如果您能为我提供更多美味的信息,我将非常感激:)
鉴于以下事实和谓词:
sound(time1).
sound(time2).
sun(time3).
relax(X):-sound(X),!,sun(X).
relax(_):-sun(_).
Run Code Online (Sandbox Code Playgroud)
执行时,relax(S).我希望得到S=time1这个!,那说(如果我错了就纠正我),如果'X'满足,那么停止回溯.
这是跟踪:
3 ?- trace.
true.
[trace] 3 ?- relax(S).
Call: (6) relax(_G1831) ? creep
Call: (7) sound(_G1831) ? creep
Exit: (7) sound(time1) ? creep
Call: (7) sun(time1) ? creep
Fail: (7) sun(time1) ? creep
Fail: (6) relax(_G1831) ? creep
false.
Run Code Online (Sandbox Code Playgroud)
那么为什么Prolog也会检查sun(time1),即使它在满足之后遇到感叹号sound(X)(因为这sound(time1)是事实).
我想知道无状态编程的好处,并找到了一个分享我的问题的人: 无状态编程的优点?
当我读完答案时,它让我对这个相反的问题感到好奇.有状态编程有哪些优点?似乎最近有很多关注无状态代码,但我对趋势很谨慎.
似乎有状态(即命令式)编程可能比无状态(即功能)编程更适合某些场景,并且我希望能够更好地识别哪些问题可以通过有状态编程来解决.
procedural-programming functional-programming stateful mutable stateless
我学习Haskell 伟大的好.
我很喜欢OOP和各种类型的系统.我用Java开发webapps(Java EE,spring,Hibernate,struts 1.x),现在我经常使用Python(pylons,django,sqlalchemy,pymongo)和Javascript.我的个人生产力有了很大的提高:轻量级方法,鸭子打字,很棒的迭代器,作为一等公民的功能,简单的语法和配置,快速工具pip和distribute(以及更多)帮助了我很多.
但是提高生产力的第一个原因是Python语言本身.
使用Haskell进行Web开发有哪些主要好处?例如,它的类型推断如何真正改善我的网络应用程序?到目前为止,我注意到当你用你的类型签名装饰你的函数时,你会为你的程序添加很多语义.我希望所有这些努力都能以某种方式回归,以保存许多行代码并使其发声.我真的很喜欢类型和数据之间的明显区别,我开始明白它们是如何工作的,但我想要一些东西:P
不要误会我的意思,我刚刚开始研究Haskell,所以Maybe我错过了一些真棒,但我真的想要了解它的范例以及它何时值得使用它.
从我准备好的文档中读到:
FunctionTransformer 将其 X(和可选的 y)参数转发给用户定义的函数或函数对象,并返回该函数的结果。这对于无状态转换非常有用,例如获取频率对数、进行自定义缩放等。
但是,我不明白这个功能有什么用处。有人能解释一下这个功能的目的吗?
stateful ×2
stateless ×2
bluebird ×1
es6-promise ×1
haskell ×1
javascript ×1
lisp ×1
mutable ×1
prolog ×1
promise ×1
python-3.x ×1
scikit-learn ×1
scope ×1
state ×1
terminology ×1