标签: chaining

方法链的影响

我知道在PHP中链接的好处,但我们可以说有以下情况

$Mail = new MailClass("mail")
        ->SetFrom("X")
        ->SetTo("X")
        ->SetSubject("X")
        ->AddRecipient("X")
        ->AddRecipient("X")
        ->AddRecipient("X")
        ->AddRecipient("X")
        ->AddRecipient("X")
        ->AddRecipient("X")
        ->Send();
Run Code Online (Sandbox Code Playgroud)

返回和重复使用对象是否存在任何问题,如速度或未遵循最佳实践等问题

如果您是Fluent-Interface的新手:Fluent-Interfaces上的Martin Fowler,也可以很好地阅读此内容

我完全理解,它不具备进行编程这种方式,能够像这样被处理:

$Mail = new MailClass("mail");
$Mail->AddRecipien(
    array(/*.....*/)
);
$Mail->SetFrom("X");
$Mail->SetTo("X");
$Mail->SetSubject("X");
$Mail->Send();
Run Code Online (Sandbox Code Playgroud)

但是让我说我​​有一个像这样的对象:

$Order = new Order()
         ->With(22,'TAL')
         ->With(38,'HPK')->Skippable()
         ->With(2,'LGV')
         ->Priority();
Run Code Online (Sandbox Code Playgroud)

请注意->With(38,'HPK')->Skippable(),这是此类编程的Pro的完美示例

php fluent-interface object chaining

7
推荐指数
1
解决办法
1992
查看次数

Javascript链接等待弹出窗口返回

如果其中一个函数涉及等待弹出窗口,我怎样才能获得一系列连续执行的函数?

在下面的authBegin函数中,我弹出一个窗口,完成后返回authBegin函数.

但链接当然不是等待它.我怎么能让它等到窗户回来?

am.authUnlessCurrent().authBegin().collectData();

var authModule=function(){

  this.authUnlessCurrent=function(){
    alert("checks auth");
  };

  this.authBegin=function(){
    window.oauth_success = function(userInfo) {
      popupWin.close();
      return this;
    }
    window.oauth_failure = function() {
      popupWin.close();
      return true;
    }
    popupWin = window.open('/auth/twitter');
  };

  this.collectData=function(){
    alert("collect data");
    return this;
  };

}
Run Code Online (Sandbox Code Playgroud)

javascript twitter oauth javascript-events chaining

7
推荐指数
1
解决办法
3948
查看次数

jQuery触发点击事件而不点击

嗯,这就是发生的事情.

$('.js-custom-dropdown').find('.custom-dropdown-unfolded').toggle();
$('.custom-dropdown-btn, .custom-dropdown-btn-unfolded').keydown(function(event){
    if (event.keyCode === 13) {
        openDropdown($(this));
    }
}).click( function(){
    openDropdown($(this));
});

function openDropdown (element){
    element.parents('.js-custom-dropdown').find('.custom-dropdown-unfolded').toggle();
    console.log($(this))
}
Run Code Online (Sandbox Code Playgroud)

当我单击下拉按钮时,openDropdown功能执行一次,但是当我选择按钮并按下回车键时,该功能被调用两次.猜猜这与链接有关,但我承认我是新手,并不完全理解jQuery设计模式.我可以cource在keydown处理程序中调用该函数两次,这将解决问题,但是..你知道:)

您能否解释一下代码有什么问题以及导致这种行为的原因?

jquery events chaining

7
推荐指数
1
解决办法
290
查看次数

将许多滤色镜应用于同一个可绘制的

我想在链中应用几个彩色滤镜到drawable.那可能吗?或者也许创建一个过滤器,它是我想要应用的过滤器的组合.

例如,我想:

Drawable d = ...;
d.setColorFilter(0x3F000000, Mode.OVERLAY).setColorFilter(0xFF2D2D2D, Mode.SCREEN)
Run Code Online (Sandbox Code Playgroud)

android chaining colorfilter android-drawable

7
推荐指数
1
解决办法
4226
查看次数

是否可以在一个赋值语句中将多个方法链接到委托?

我想将两个(可能更多的未来)方法链接到一个委托,并且想知道是否有办法在一个赋值语句中执行此操作,例如

我有一个委托方法签名定义为

public delegate void MaskRequestSection(Request request); 
Run Code Online (Sandbox Code Playgroud)

...和使用此签名的2种方法,即......

public void MaskCvnSection(Request request)
{
    // do the masking operation
}

public void MaskCardNumberSection(Request request)
{
    // do the masking operation
}
Run Code Online (Sandbox Code Playgroud)

目前,我正在使用以下实例化delegete,将2个​​方法链接到它然后调用它们...

private void HideDetailsInRequest(Request request)
{
    MaskRequestSection maskRequestSection = MaskCvnSection;
    maskRequestSection += MaskCardNumberSection;
    maskRequestSection(request);
}
Run Code Online (Sandbox Code Playgroud)

....我只是好奇为什么我不能在下面的一个声明中链接两个代表,

MaskRequestSection maskRequestSection = MaskCardNumberSection+ MaskCvnSection;
Run Code Online (Sandbox Code Playgroud)

......但是如果有另一种方式可以在一个声明中完成.我无法在MSDN上找到任何专门针对此问题的内容,而我只是在问自己的好奇心.

提前致谢.

c# delegates chaining

6
推荐指数
1
解决办法
1192
查看次数

$ q.reject和AngularJS链接承诺中的处理错误

我无法理解链接承诺的错误处理的基本概念.为了学习规则,我写了一个简单的例子,猜测结果是什么.但不幸的是,它不会像我一样表现.我已经阅读了很多关于这个主题的文章,但由于我的英语不好,我可能无法得到细节.

无论如何,这是我的代码:

    var promiseStart = $q.when("start");
    var promise1 = promiseStart.then(function() {
            return Serviceforpromise1.get();
    });
    var promise2 = promise1.then(function(data1)
    {
            return Serviceforpromise2.get(data1);
    },function(error)
    {
            return $q.reject();
    });
    var promiseend = promise2.then(function(data2)
    {
            return data2;
    },function(error)
    {
            return error;
    });
    return promiseend;
Run Code Online (Sandbox Code Playgroud)

嗯,我知道它可以更好地编码,但它只是为了这个目的.以下是Serviceforpromise1函数的代码:

    function Serviceforpromise1()
    {
            ...
            return $http.get(*whatever*).then(function (data){
                return data;
            },function(error)
            {
                return $q.reject();
            });
    }
Run Code Online (Sandbox Code Playgroud)

仅考虑Serviceforpromise1失败的情况.一个$ q.rejec t被送回主链上,所以我在等待的"错误回调promise1.然后( "被称为和它的工作如预期,我决定为例子错误transfert到" promise2.然后 "所以在这个错误回调我添加了行返回$ q.reject() ;但它从未达到第二个错误回调(" promise2 .then "一个)我不明白为什么(像Serviceforpromise1,我返回了一个拒绝承诺!)

我很乐意深入了解这里发生的事情.谢谢你的帮助.

javascript chaining promise angularjs

6
推荐指数
1
解决办法
1万
查看次数

如何在jquery链接中选择后使用多个.find()?

基本上标题是什么 - 我想知道是否有多种方法可以.find()在同一个jQuery选择器上多次使用.或者可能.find()不止一次使用不是正确的方法吗?

这就是我想要完成的事情:

HTML

<div id="foo">
    <h2>A Header</h2>
    <p>Some text</p>
</div>
Run Code Online (Sandbox Code Playgroud)

JS

$("#foo").find("h2").html("New header");
$("#foo").find("p").html("New text");
Run Code Online (Sandbox Code Playgroud)

Webstorm抱怨重复的jQuery选择器.有没有不同/更好的方法来做到这一点?

html javascript jquery selector chaining

6
推荐指数
2
解决办法
4453
查看次数

Python 中的条件函数链接

g想象一下,我想通过链接子函数来实现一个函数。这可以通过以下方式轻松完成:

def f1(a):
    return a+1

def f2(a):
    return a*2

def f3(a):
    return a**3

g = lambda x: f1(f2(f3(x)))
Run Code Online (Sandbox Code Playgroud)

然而,现在考虑一下,哪些子功能将链接在一起,取决于条件:具体来说,是预先已知的用户指定的选项。人们当然可以这样做:

def g(a, cond1, cond2, cond3):

    res = a
    if cond1:
        res = f3(res)
    if cond2:
        res = f2(res)
    if cond3:
        res = f1(res)
    return res
Run Code Online (Sandbox Code Playgroud)

然而,我认为最好g提前根据函数的组成函数来定义函数,而不是在每次调用函数时动态检查这些静态条件。不幸的是,以下给出了RuntimeError: maximum recursion depth exceeded

g = lambda x: x
if cond1:
    g = lambda x: f3(g(x))
if cond2:
    g = lambda x: f2(g(x))
if cond3:
    g = lambda x: f1(g(x)) …
Run Code Online (Sandbox Code Playgroud)

python function chaining

6
推荐指数
1
解决办法
3287
查看次数

打字稿::条件链接函数

我正在尝试实现一组链式函数,但不知何故我卡在这里了。

interface ISimpleCalculator {
  plus(value: number): this;
  minus(value: number): this;
  divide(value: number): this;
  multiply(value: number): this;
  sum(): void
}

interface ISpecialCalculator extends ISimpleCalculator {
  specialPlus(value: number): ISimpleCalculator;
  specialMinus(value: number): ISimpleCalculator;
}

let testCalculator: ISpecialCalculator;
testCalculator  
  .plus(20)
  .multiply(2)
  .specialPlus(40)  
  .plus(20)
  .minus(5)
  .specialMinus(20)  //<-- Error! Property 'specialMinus' does not exist on type 'ISimpleCalculator'.
  .sum()
Run Code Online (Sandbox Code Playgroud)

我想存档链中函数的类型检查。在上面的例子中,我希望函数specialPlusspecialMinusinISpecialCalculator只使用一次,ISimpleCalculator可以多次使用。我对打字稿很陌生,到目前为止我一直在尝试不同的方法(高级类型(Pick& Omit))但没有成功。我想知道在这种情况下有没有其他方法可以提供帮助。

chaining typescript

6
推荐指数
1
解决办法
174
查看次数

Typescript 中使用异步方法链接(刚刚找到了解决方案)

我正在编写一个模块,旨在在将查询调用到数据库之前准备查询。普通 javascript 中的代码运行得很好,但是当我尝试用 Typescript 编写它时,出现了错误:Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member

我的 JavaScript 代码:

class QueryBuilder {
  constructor(query) {
    this.query = query;
  }

  sort(keyOrList, direction) {
    this.query = this.query.sort(keyOrList);
    return this;
  }

  skip(value) {
    this.query = this.query.skip(value);
    return this;
  }

  limit(value) {
    this.query = this.query.limit(value);
    return this;
  }

  then(cb) {
    cb(this.query.toArray());
  }
}
Run Code Online (Sandbox Code Playgroud)

打字稿中的代码:

class QueryBuilder {
  public query: Cursor;
  constructor(query: Cursor) {
    this.query = query;
  }

  public …
Run Code Online (Sandbox Code Playgroud)

javascript chaining node.js async-await typescript

6
推荐指数
1
解决办法
2093
查看次数