2015-12-30 83 views
0

有没有更清晰的写这段代码的方法?这只是.trim()声明有所不同。如何在“链接”方法调用中使用条件语句?

if (imageOptions.trim) { 
    // Trim 
    gm(imageBuffer, 'image.' + imageOptions.imageFormat) 
     .gravity(imageOptions.gravity) 
     .resize(imageOptions.imageWidth, imageOptions.imageHeight, '^') 
     .crop(imageOptions.imageWidth, imageOptions.imageHeight) 
     .trim() 
     .toBuffer(imageOptions.imageFormat.toUpperCase(), callback); 
} 
else { 
    // No trim 
    gm(imageBuffer, 'image.' + imageOptions.imageFormat) 
     .gravity(imageOptions.gravity) 
     .resize(imageOptions.imageWidth, imageOptions.imageHeight, '^') 
     .crop(imageOptions.imageWidth, imageOptions.imageHeight) 
     .toBuffer(imageOptions.imageFormat.toUpperCase(), callback); 
} 

奖金问题:这些“链接”方法调用的正确术语是什么?

+0

是'gm' GraphicsMagick for node? –

+0

@ GabyakaG.Petrioli是的,正确。 –

回答

3

您可以将这些方法的结果调用一个变量,然后有一个条件,就没有必要写完整的整个链条:

var img = gm(...) 
      .gravity(..) 
      .resize(..) 
      .crop(..); 

if (imageOptions.trim) { 
    img.trim(); 
} 

img.toBuffer(..); 

而且这些东西被称为链接方法调用

+0

将'img.trim()'存储到另一个var并将'.toBuffer()'用作更安全,因为您不知道'trim'是否在原始文件上工作或返回新副本(*至少我不知道从给定的背景*)。 –

+1

同意,这取决于图书馆是如何实施的。我熟悉的大多数图像库操纵对象本身,而不是返回一个新的对象。 – deceze

相关问题