-1

我在这个项目中使用了wikipedia-js。这是我的summary.js文件代码。

var wikipedia = require("wikipedia-js");
var something = "initial";
module.exports = {
    wikitext: function(topicname) {
        console.log("Inside wikitex funciton :" + topicname);
        var options = {
            query: topicname,
            format: "html",
            summaryOnly: false,
            lang: "en"
        };

        wikipedia.searchArticle(options, function(err, htmlWikiText) {
            console.log("Inside seararticlefunciton :");

            if (err) {
                console.log("An error occurred[query=%s, error=%s]", topicname, err);
                return;
            }
            console.log("Query successful[query=%s, html-formatted-wiki-text=%s]", topicname, htmlWikiText);
            something = htmlWikiText;
        });
        return something;
    },
};

我在/wiki/:topicname路线中使用的这个模块。里面对应的代码index.js是这样的。

router.get('/wiki/:topicname', function(req, res, next) {
    var topicname = req.params.topicname;
    console.log(topicname);
    var first = summary.wikitext(topicname);
    res.send("Hello "+first);
});

问题是,每次我访问 wiki/ some-topicsummary.js时,执行之前的最后一个返回语句htmlWikiText都会填充内容。所以我总是hello initial在浏览器页面上看到。尽管经过一段时间后,由于console.log声明,它会打印在终端上。

那么我应该如何解决这个问题呢?

4

1 回答 1

1

我不会尝试将这段代码变成同步的。我只是将其更正为异步版本。

您需要将回调传递给 wikitext() 并返回该回调中的值。这是修改后的 wikitext() 代码和调用它的路由:

var wikipedia = require("wikipedia-js");
module.exports = {
    wikitext: function(topicname, callback) {
        console.log("Inside wikitex funciton :" + topicname);
        var options = {
            query: topicname,
            format: "html",
            summaryOnly: false,
            lang: "en"
        };

        wikipedia.searchArticle(options, function(err, htmlWikiText) {
            console.log("Inside seararticlefunciton :");
            if (err) {
                console.log("An error occurred[query=%s, error=%s]", topicname, err);
                return callback(err);
            }
            console.log("Query successful[query=%s, html-formatted-wiki-text=%s]", topicname, htmlWikiText);
            callback(null, htmlWikiText);
        });
    }
};


router.get('/wiki/:topicname', function(req, res, next) {
    var topicname = req.params.topicname;
    console.log(topicname);
    summary.wikitext(topicname, function(err, result) {
        if (err) {
            return res.send(err);
        }
        if (!result) {
            return res.send('No article found');
        }
        res.send("Hello "+result);

    });
});
于 2016-01-26T17:45:07.783 回答