node.js - nodejs co库的问题

 君君6789_903 发布于 2022-11-04 21:05

程序代码如下:

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

求解答。。。

1 个回答
  • 两个问题:

    1. 你用的node什么版本?建议用node5.1.0-stable,因为默认支持generator

    2. 你的问题是什么,报错没明白么?还是其他什么

    看错误应该是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);
    });
    2022-11-12 01:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有