1

在Javascript(node.js)中构建流畅界面的最佳方法是什么

obj.function1().function2().function3();

哪里的函数是异步方法?

有一个称为链锯的模块,但如果它可能与延迟和承诺有关(https://github.com/kriskowal/q

UPD:带有 q.js 的链

obj.function1().then(obj.function2) 
//inside obj.function2 "this" context is lost, 
//and code is actually broken

obj.function1().then(funciton(){
  obj.function2() // <-- "this" context is OK
}) 
4

2 回答 2

1

是的,很好。链需要以不同的方式构造:

obj.function1().then(obj.function2).then(obj.function3);
  • function1需要返回一个已解决/可解决的承诺。

  • function2(或所有中间函数)需要返回结果或新的已解决/可解决的承诺。

  • function3(或任何最后出现的函数)需要对链中早期函数的累积结果做一些事情 - 即。它必须是“消费者”功能。

由于 Promise 具有拒绝和解决机制,因此 Promise 链提供了比链锯更大的内在可能性,以允许/终止沿链的进展。

由于 promise 接口包含除 之外的方法.then(),因此还提供了进一步的灵活性。

也就是说,我以前没有看过电锯,所以我还没有真正了解它的全部潜力。

于 2013-05-21T20:32:30.243 回答
0

延迟实现允许您通过以下方式做一些接近的事情invoke

obj.function1().invoke('function2').invoke('function3');

当 ES6 代理成为现实时,计划允许使用下面的代码实现相同的功能

obj.function1().function2().function3();

但我们还没有。

另外值得注意的是,在Deferred promise对象中实际上是一个等于promise.then. 所以普通函数可以链接为:

function1()(function2)(function3);

我希望这会有所帮助

于 2013-05-23T14:39:34.123 回答