ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

异步思维片段

punkave 全部

设计用于改进您编程风格的node.js异步模块片段

标签 片段

详细信息

  • 2014.12.24.14.37.59
  • github.​com
  • github.​com
  • 10年前
  • 2小时前
  • 10年前

安装

  • 总计 788
  • Win 452
  • Mac 202
  • Linux 134
8月6日 8月5日 8月4日 8月3日 8月2日 8月1日 7月31日 7月30日 7月29日 7月28日 7月27日 7月26日 7月25日 7月24日 7月23日 7月22日 7月21日 7月20日 7月19日 7月18日 7月17日 7月16日 7月15日 7月14日 7月13日 7月12日 7月11日 7月10日 7月9日 7月8日 7月7日 7月6日 7月5日 7月4日 7月3日 7月2日 7月1日 6月30日 6月29日 6月28日 6月27日 6月26日 6月25日 6月24日 6月23日
Windows 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
Mac 1 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Linux 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

读我

源代码
raw.​githubusercontent.​com

示例

series TAB ->

return async.series({
  nameOfStepOne: function(callback) {
    // After naming step one and tabbing again, you are here
  }
});

step TAB ->

return async.series({
  stepOne: function(callback) {
    ...
  },
  stepTwo: function(callback) {
    // Position yourself after step one, type "step"
    // and hit tab; you are prompted to name "stepTwo".
    // Hit tab again and you're here
  }
});

**each TAB ->** “javascript return async.eachSeries(myArray, function(item, callback) { // 在输入myArray并再次按tab后,您将在这里 }, callback);

**`err TAB ->`**
```javascript
if (err) {
  return callback(err);
}

**done TAB ->** ”javascript return callback(null);

**`skip TAB ->`**
```javascript
// Safely invoke callback when we didn't
// do anything async
return setImmediate(callback);

**skipr TAB ->** “javascript // 在我们没有进行任何异步工作的情况下,安全地调用带有一些数据的回调,避免崩溃 return setImmediate(_.partial(callback, null, data));

**`whil TAB ->`**
```javascript
var done = false;
return async.whilst(
  function() { return !done; },
  function(callback) {
    // You start typing again here
  }, callback
);

您的内部函数会不断被调用,直到将done设置为true。

哲学

如果您打算用回调进行编码,您必须使用async模块。否则,您将编写意大利面条式的代码和无尽的嵌套括号。

async模块解决了这个问题,但它需要大量的输入,这会导致错误。这就是为什么这些片段有用处。

这些片段使用了简洁的短关键词,以便您能够轻松地将它们刻在手指上,并永久改进您的Node编程风格。

这些片段都以return开始,以避免意外地跌入其他代码中。调用接收回调的其他函数不会停止您函数的执行,除非您返回。

“each”片段故意使用“eachSeries”。“async.each”通常是错误的做法,因为您没有考虑到同时发生的100?1000?1000000?件事的后果。

如果您有合理的理由相信可以安全地一次处理多个任务,请稍后切换到“eachLimit”。

如果您在函数中没有执行任何异步工作,并且您需要异步调用回调以避免崩溃JavaScript堆栈,则应始终使用“skip”。如果不使用“skip”(它调用“setImmediate”),则您的代码看起来似乎很正常,直到有一天,您有一两百个项目,JavaScript堆栈崩溃。这对于“async.eachSeries”尤其如此。

致谢

这些片段是为支持我们在P'unk Avenue的工作而开发的。