首先,您不能写:
contract().then(invoice() ... )
(如果该
invoice()函数返回 另一个 函数充当
then处理程序,则可以使用)
您必须写:
contract().then(function (value) { invoice() ... })要么:
contract().then(value => invoice() ... )
或者,如果一个函数应该处理其他函数的结果,则可能是这样:
contract().then(invoice).then(policy).then(function (result) { ... });作为参数传递给您的
then是函数,而不是调用函数的结果(在您的示例中这可能是一个承诺)。
我不知道这是否是您的方法的唯一问题,但这肯定是问题之一。当然,它可能会起作用,但可能不会达到您的期望。
2017更新
如果您使用的是ES2017 async / await,那么从v7.0开始,它就可以在Node中使用,而不是:
contract().then(invoice).then(policy).then((result) => { ... });您可以使用:
let a = await contract();let b = await invoice(a);let c = await policy(b);// here your `result` is in `c`
甚至这个:
let result = await policy(await invoice(await contract()));
注意,只能在用
async关键字声明的函数中使用它。这适用于7版以上的Node。对于较旧版本的Node,您可以使用基于生成器的协程,使用语法稍有不同的类似内容,或者如果您愿意的话,可以使用Babel来编译您的代码做。



