从您的示例来看,我认为您已经看到了Q自述文件中的Sequences部分,但未能理解它。
当每个函数的输出作为输入传递给下一个函数时,原始示例使用“瀑布”模型:
var funcs = [foo, bar, baz, qux];var result = Q(initialVal);funcs.forEach(function (f) { result = result.then(f);});return result;但是您只想按顺序执行我们所有的函数,因此您只需将每个函数与其变量绑定即可:
var args = ["first", "second", "third", "fourth"];var result = Q();args.forEach(function (t) { result = result.then(treat.bind(null, t));});return result;在我的示例中,
treat函数将被顺序调用4次,并且
resultpromise将使用最新
treat调用的值来解决(所有先前调用的结果都将被忽略)。
诀窍是该
.then方法接受一个处理程序,该处理程序将在当前promise解析后返回新的promise进行调用。因此,您应该传递给
.then函数,该函数应在执行链的下一步中调用。
treat.bind(null,t)将
treat函数与属性绑定
t。换句话说,它返回一个新函数,它将调用
treat,
t作为其第一个参数传递。



