Node.js 能否异步分派非转义闭包函数?

Node.js 能否异步分派非转义闭包函数?,node.js,ios,swift,asynchronous,swift3,closures,Node.js,Ios,Swift,Asynchronous,Swift3,Closures,我对转义闭包和非转义闭包之间区别的简要理解: 在函数返回后调用转义闭包。据我所知,这与中处理回调的方式类似-函数立即返回,异步执行,调用闭包/完成块/回调时处理函数内长期运行操作的结果 非转义闭包似乎是同步执行的,函数本身在长时间运行的操作完成之前不会返回 (我做对了吗?) 阅读更改日志和从Swift 2的@noescape移动到Swift 3的@escaping(in)的理由,您似乎可以异步调度非转义闭包 这是真的吗?可能吗 能否异步调度非转义闭包函数?如果是,怎么做? 加分-我真的很想了

我对转义闭包和非转义闭包之间区别的简要理解:

  • 在函数返回后调用转义闭包。据我所知,这与中处理回调的方式类似-函数立即返回,异步执行,调用闭包/完成块/回调时处理函数内长期运行操作的结果
  • 非转义闭包似乎是同步执行的,函数本身在长时间运行的操作完成之前不会返回
(我做对了吗?)

阅读更改日志和从Swift 2的
@noescape
移动到Swift 3的
@escaping
(in)的理由,您似乎可以异步调度非转义闭包

这是真的吗?可能吗

能否异步调度非转义闭包函数?如果是,怎么做?

加分-我真的很想了解为什么存在转义和非转义闭包:

  • 是否存在异步调度非转义闭包而不是转义闭包的实际用例
  • 在设计方案中,它建议函数式编程受益于默认的不转义(读:同步?)。这是真的吗?为什么?
  • 非转义闭包和中的承诺之间有什么相似之处吗
  • 如果我在所有这些方面都错了,为什么不把它叫做
    @async
    ,而不是
    @escaping

我无法想象异步调度函数是如何不转义的。提案中是否有具体声明表明:

关于你的其他问题:

  • 是否存在异步调度非转义闭包而不是转义闭包的实际用例
这应该是不可能的,所以不会有它的用例:)

  • 在设计方案中,它建议函数式编程受益于默认的不转义(读:同步?)。这是真的吗?为什么?
该提案说,函数式编程将受益于较少的样板文件(即必须将所有参数标记为
@noescape
)。由于函数式编程通常需要许多函数作为主要是非转义的参数,因此这个新的默认值允许函数式算法具有更干净、更少混乱的签名,并减少到处键入
@noescape
样板文件

  • node.js中的非转义闭包和承诺之间有什么相似之处吗
不,承诺是异步的,将使用转义闭包而不是非转义闭包在Swift中实现

  • 如果我在所有这些方面都错了,为什么不把它叫做@async而不是@escaping呢

因为它们不是完全相同的概念。转义闭包可以同步执行,但可以保存下来以便以后执行
@async
描述了执行的性质,但
@escaping
仅意味着闭包将在传递给它的函数返回后执行。当转义闭包确实执行时,它可能同步执行,也可能异步执行。

为了异步执行,闭包需要存储在函数之外的某个位置(因为不能保证它会在函数之前完成执行)。因此,它逃脱了。因此,“异步分派非转义闭包函数”是一个矛盾。你读到什么让你不这么想?事实上,这听起来也很矛盾。这来自于我与另一个开发人员的另一次对话。我问“为什么不直接将其命名为@async,而不是使用@escaping来混淆它?”?对此,他回答说您可以异步调度一个非转义闭包。¯\_(ツ)_/¯