在Node.js中远程调用具有上下文的函数

时间:2014-08-06 18:05:51

标签: javascript node.js error-handling

我正在尝试编写一个按顺序执行一系列函数的javascript程序(比如function1,function2 ... function5)。我想继续执行这些函数而不管前面函数的成功或失败,即function1返回成功,function2返回成功,function3返回错误(但执行不会在此停止),function4返回成功,functio5返回成功。

现在当其中一个函数返回错误时,我想分别重试该函数的执行。在上面的例子中,我想尝试重新执行function3(function3的输入和输出独立于其他函数)。但是我希望运行1-5的模块与重新执行的模块不同。所以我需要一种通过另一个模块在on模块中执行函数的方法。所以我现在有两个问题,

1.在javascript中处理库是否有错误这样做?

2.如果没有,如何将一个模块中的文档/对象的上下文/状态传递给不同模块(例如,错误恢复模块)中的函数以便重新执行?
PS:我对javascript相对较新,因此我不知道是否存在任何模式来处理这种情况。在Java中,我假设您将序列化对象,生成不同的线程,使用RMI发送上下文并远程重新执行该函数。

谢谢。

1 个答案:

答案 0 :(得分:1)

这里有很多不同的方法,具体取决于细节。

对于错误重试,只需将函数传递给attempt之类的模块即可。或者使其成为基于承诺的模式,以便在失败的承诺上重试当前函数。

其他东西,取决于你的细节。

您想将相同的参数传递给所有函数吗?它看起来像,因为你想重试第3步而不管其他人。您只需使用async

function first() {
    // do stuff
    return 1;
}
function second() {
    // do stuff
    return 2;
}
// ... up to fifth

async.series([first, second, third, fourth, fifth], function (err, results) {
    console.log('Results: ', results); // should return [1, 2, 3, 4, 5] 
});

或许您想要一个瀑布,将上一个功能的结果传递给下一个?然后你会使用像async-waterfall这样的东西。

您想存储成功与否?在全球范围内?本地?重试次数怎么样?

如果没有进一步的信息,这是我能做的最好的事情。