程序代码如下:
var arp = require('node-arp'); var co = require('co'); function getMAC(ipAddress) { return function (callback) { arp.getMAC(ipAddress, callback); } } co(function*(){ var address=[ '192.168.1.100', '192.168.1.101' ]; var p1=yield getMAC(address[0]); var p2=yield getMAC(address[1]); console.log(address[0]+' ->'+p1); console.log(address[1]+' ->'+p2); return 'done'; })(function(err,result){ console.log('err: '+err+', result: '+result); });
我参考别人的博客写的:不太懂co 和 yield 为嘛会这样?
Debugger listening on port 18507 f:\nodejs\node-study\generator\Test4.js:27 })(function(err,result){ ^ TypeError: object is not a function
求解答。。。
两个问题:
你用的node什么版本?建议用node5.1.0-stable,因为默认支持generator
你的问题是什么,报错没明白么?还是其他什么
看错误应该是co
的版本问题,看如下文档描述:
co@4.0.0 has been released, which now relies on promises. It is a stepping stone towards ES7 async/await. The primary API change is how co() is invoked. Before, co returned a "thunk", which you then called with a callback and optional arguments. Now, co() returns a promise.
因该新版的co
将主要API做了变更,不再返回thunk
函数,而是返回一个promise
,所以你的代码改成如下方式即可:
co(function*(){
var address=[
'192.168.1.100',
'192.168.1.101'
];
var p1=yield getMAC(address[0]);
var p2=yield getMAC(address[1]);
console.log(address[0]+' ->'+p1);
console.log(address[1]+' ->'+p2);
return 'done';
})
.then(function(err, result){
console.log('err: '+err+', result: '+result);
});