Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript python与node.js的混淆_Javascript_Python_Node.js - Fatal编程技术网

Javascript python与node.js的混淆

Javascript python与node.js的混淆,javascript,python,node.js,Javascript,Python,Node.js,所以我有这个python代码,我正试图转换为node.js,但我不知道如何转换 import urllib.request, re def getDef(word): link = "http://www.merriam-webster.com/dictionary/%s" % word data = urllib.request.urlopen(link).read().decode() try: return re.search("<p>:

所以我有这个python代码,我正试图转换为node.js,但我不知道如何转换

import urllib.request, re
def getDef(word):
    link = "http://www.merriam-webster.com/dictionary/%s" % word
    data = urllib.request.urlopen(link).read().decode()
    try:
        return re.search("<p>: (.*?)</p><p>", data).group(1)
    except:
        return "No match"
 class newDefinition:
     def __init__(self, word):
         self.definition = getDef(word);
 >>> definition = newDefintion("color")
 >>> print(definition.definition)
a quality such as red, blue, green, yellow, etc., that you see when you look at something
导入urllib.request,重新
def getDef(word):
链接=”http://www.merriam-webster.com/dictionary/%s%字
data=urllib.request.urlopen(link.read().decode())
尝试:
返回重新搜索(“:(.*)

”,数据)。组(1) 除: 返回“不匹配” 类别定义: 定义初始化(self,word): self.definition=getDef(word); >>>定义=新定义(“颜色”) >>>打印(定义.定义) 当你看某物时所看到的一种品质,如红色、蓝色、绿色、黄色等
然而,在node.js中,我似乎可以像在python中一样返回它,因为它是一种回调方式,或者至少我似乎无法返回它,这就是为什么我要问我如何做node.js的等价物,或者是它们的不等价物?这是我到目前为止所做的,也许你可以发现我做错了什么,以及如何修复它

var urllib = require("urllib"); // installed with npm
var getDef = function(word){
    var link = "http://www.merriam-webster.com/dictionary/" + word;
    var urlData = urllib.request(link, {}, function(err, data, res){
        var re = new RegExp("<p>: (.*?)</p><p>");
        var results = data.toString();
        var match = re.exec(results)[1];
        return match; // Expected it to give urlData the definition
    });
    return urlData;
}
var Definition = function(word){
    this.definition = getDef(word);
}
definition = new Definition("color");
console.log(definition.definition); // this won't give the definition but the information of the urllib itself rather.
var urllib=require(“urllib”);//安装有npm
var getDef=函数(字){
变量链接=”http://www.merriam-webster.com/dictionary/“+字;
var urlData=urllib.request(链接,{},函数(err,data,res){
var re=new RegExp(“:(.*?)

”; var results=data.toString(); var match=re.exec(结果)[1]; return match;//应为urlData提供定义 }); 返回数据; } 变量定义=函数(字){ this.definition=getDef(word); } 定义=新定义(“颜色”); console.log(definition.definition);//这不会给出定义,而是给出urllib本身的信息。

一般来说,我想弄清楚的是如何使用异步代码,这样我就可以返回我需要的东西,但我也不习惯这个概念,所以python中有类似的东西吗?另外,如果你能给我指出一些关于异步代码的好文档,那也很好。

因为
return
实际上只是退出函数而不是返回值,所以你需要使用回调函数。它看起来是这样的:

var urllib = require("urllib");
var getDef = function(word, callback){
  var link = 'http://www.merriam-webster.com/dictionary/' + word;
  urllib.request(link, {}, function(err, data, res) {
    var re = new RegExp('<p>: (.*?)</p><p>');
    var results = data.toString();
    var match = re.exec(results)[1];
    callback(match);
  });
};

编辑:设置对象的属性也有相同的想法。它可能看起来像这样:

var Definition = function(word) {
  var self = this;

  getDef(world, function(definition, callback) {
    self.definition = definition;
    callback.call(self);
  });
};
并被称为:

var definition = new Definition('color', function() {
  console.log(definition.definition);
});

由于
return
实际上只是退出函数而不是返回值,因此需要使用回调函数。它看起来是这样的:

var urllib = require("urllib");
var getDef = function(word, callback){
  var link = 'http://www.merriam-webster.com/dictionary/' + word;
  urllib.request(link, {}, function(err, data, res) {
    var re = new RegExp('<p>: (.*?)</p><p>');
    var results = data.toString();
    var match = re.exec(results)[1];
    callback(match);
  });
};

编辑:设置对象的属性也有相同的想法。它可能看起来像这样:

var Definition = function(word) {
  var self = this;

  getDef(world, function(definition, callback) {
    self.definition = definition;
    callback.call(self);
  });
};
并被称为:

var definition = new Definition('color', function() {
  console.log(definition.definition);
});

由于
return
实际上只是退出函数而不是返回值,因此需要使用回调函数。它看起来是这样的:

var urllib = require("urllib");
var getDef = function(word, callback){
  var link = 'http://www.merriam-webster.com/dictionary/' + word;
  urllib.request(link, {}, function(err, data, res) {
    var re = new RegExp('<p>: (.*?)</p><p>');
    var results = data.toString();
    var match = re.exec(results)[1];
    callback(match);
  });
};

编辑:设置对象的属性也有相同的想法。它可能看起来像这样:

var Definition = function(word) {
  var self = this;

  getDef(world, function(definition, callback) {
    self.definition = definition;
    callback.call(self);
  });
};
并被称为:

var definition = new Definition('color', function() {
  console.log(definition.definition);
});

由于
return
实际上只是退出函数而不是返回值,因此需要使用回调函数。它看起来是这样的:

var urllib = require("urllib");
var getDef = function(word, callback){
  var link = 'http://www.merriam-webster.com/dictionary/' + word;
  urllib.request(link, {}, function(err, data, res) {
    var re = new RegExp('<p>: (.*?)</p><p>');
    var results = data.toString();
    var match = re.exec(results)[1];
    callback(match);
  });
};

编辑:设置对象的属性也有相同的想法。它可能看起来像这样:

var Definition = function(word) {
  var self = this;

  getDef(world, function(definition, callback) {
    self.definition = definition;
    callback.call(self);
  });
};
并被称为:

var definition = new Definition('color', function() {
  console.log(definition.definition);
});

这是我两分钱的建议

永远不要使用正则表达式来解析HTML(有关更多详细信息,请参阅),而是使用类似XPath的库来解析文档。您可以像或那样使用库

这是一个干净的解决方案

var request = require('request'),
    when    = require('when'),
    cheerio = require('cheerio');

var URL = 'http://www.merriam-webster.com/dictionary/';

/**
 * @param word: Word to search the dictionary
 * @returns 
 *   Promise object which resolves to array of
 *   definitions of the word
 */
var getDef = function(word){
    var defer = when.defer();
    request(URL + word, function(err, res, body){
        if (err || res.statusCode !== 200){
            defer.reject();
        }
        var defs = [];
        var $ = cheerio.load(body);
        $('.wordclick .headword:first-child p').each(function(i,ele){
            var definition = $(ele).text();
            defs.push(definition);
        });

        defer.resolve(defs);
    });
    return defer.promise;
}

getDef('happy').then(function(words){
    console.log(words);
});

注意:这里我使用(Promise+库)而不是节点的标准CPS样式。

这里是我的两分钱建议

永远不要使用正则表达式来解析HTML(有关更多详细信息,请参阅),而是使用类似XPath的库来解析文档。您可以像或那样使用库

这是一个干净的解决方案

var request = require('request'),
    when    = require('when'),
    cheerio = require('cheerio');

var URL = 'http://www.merriam-webster.com/dictionary/';

/**
 * @param word: Word to search the dictionary
 * @returns 
 *   Promise object which resolves to array of
 *   definitions of the word
 */
var getDef = function(word){
    var defer = when.defer();
    request(URL + word, function(err, res, body){
        if (err || res.statusCode !== 200){
            defer.reject();
        }
        var defs = [];
        var $ = cheerio.load(body);
        $('.wordclick .headword:first-child p').each(function(i,ele){
            var definition = $(ele).text();
            defs.push(definition);
        });

        defer.resolve(defs);
    });
    return defer.promise;
}

getDef('happy').then(function(words){
    console.log(words);
});

注意:这里我使用(Promise+库)而不是节点的标准CPS样式。

这里是我的两分钱建议

永远不要使用正则表达式来解析HTML(有关更多详细信息,请参阅),而是使用类似XPath的库来解析文档。您可以像或那样使用库

这是一个干净的解决方案

var request = require('request'),
    when    = require('when'),
    cheerio = require('cheerio');

var URL = 'http://www.merriam-webster.com/dictionary/';

/**
 * @param word: Word to search the dictionary
 * @returns 
 *   Promise object which resolves to array of
 *   definitions of the word
 */
var getDef = function(word){
    var defer = when.defer();
    request(URL + word, function(err, res, body){
        if (err || res.statusCode !== 200){
            defer.reject();
        }
        var defs = [];
        var $ = cheerio.load(body);
        $('.wordclick .headword:first-child p').each(function(i,ele){
            var definition = $(ele).text();
            defs.push(definition);
        });

        defer.resolve(defs);
    });
    return defer.promise;
}

getDef('happy').then(function(words){
    console.log(words);
});

注意:这里我使用(Promise+库)而不是节点的标准CPS样式。

这里是我的两分钱建议

永远不要使用正则表达式来解析HTML(有关更多详细信息,请参阅),而是使用类似XPath的库来解析文档。您可以像或那样使用库

这是一个干净的解决方案

var request = require('request'),
    when    = require('when'),
    cheerio = require('cheerio');

var URL = 'http://www.merriam-webster.com/dictionary/';

/**
 * @param word: Word to search the dictionary
 * @returns 
 *   Promise object which resolves to array of
 *   definitions of the word
 */
var getDef = function(word){
    var defer = when.defer();
    request(URL + word, function(err, res, body){
        if (err || res.statusCode !== 200){
            defer.reject();
        }
        var defs = [];
        var $ = cheerio.load(body);
        $('.wordclick .headword:first-child p').each(function(i,ele){
            var definition = $(ele).text();
            defs.push(definition);
        });

        defer.resolve(defs);
    });
    return defer.promise;
}

getDef('happy').then(function(words){
    console.log(words);
});

注意:这里我使用的是(Promise+库)而不是节点的标准CPS样式。

我明白了,但是如果我不想只打印数据并存储数据或为其设置变量名,该怎么办?就像
this.definition=definition
那样,它会认为这是回调函数,所以这不起作用吗?我将编辑我的问题以反映这一点,抱歉造成混淆。您可以这样做,但必须在获取定义的函数的回调内完成。我编辑问题是为了更好地展示我正在努力做的事情,因为第一个例子并没有很好地说明为什么我不知道如何使用异步代码。添加了另一个例子。我明白了,但是如果我不想只打印数据,不想存储数据或为其设置变量名,该怎么办?就像
this.definition=definition
那样,它会认为这是回调函数,所以这不起作用吗?我将编辑我的问题以反映这一点,抱歉造成混淆。您可以这样做,但必须在获取定义的函数的回调内完成。我编辑问题是为了更好地展示我正在努力做的事情,因为第一个例子并没有很好地说明为什么我不知道如何使用异步代码。添加了另一个例子。我明白了,但是如果我不想只打印数据,不想存储数据或为其设置变量名,该怎么办?像
this.definition=