我试图定义一些宏,这些宏允许为真正异步的函数声明一系列函数调用。宏将这些调用序列转换为continuation;即,一个带有两个参数的函数:函数中要继续的位置,以及函数的局部状态。
所以,这个想法是:
function test() {
f(1)
f(2)
}
=>
function test(_,local) {
switch (_) {
case 0: f(1,function() { test(1,local) }); return
case 1: f(2,function() { test(2,local) }); return
}
}
为此,我定义了两个宏,function
和f
。但是在一般情况下,除f
之外还有一整套函数可以任意使用,并与函数定义中的其他(非宏)代码混合。 This question似乎在问一个更窄的版本的问题,我不确定接受的答案(命名模式)是否有效(我无法看到如何使其工作),因为需要允许从各种选择中选择任意数量的连续子宏。
问题是,这需要适用于嵌套的匿名函数,所以我需要一些方法在case语句中相对于当前函数分配这些顺序语句编号。我该怎么做?
我有一个例子here。
对于第一种情况,工作正常:每个case语句都传递回调函数中下一个case语句的编号。但是对于第二种情况,这失败了,例如,第一种case语句试图访问嵌套函数中第一个case语句的编号。这是因为我们使用全局变量来跟踪案例编号,但我不知道如何相对于当前范围跟踪此变量。使用console.log我已经跟踪了评估并发现各个宏没有以嵌套方式进行评估。如何在一个宏中建立一个值,然后从任何作为词汇子项的宏访问该值到该宏?