如何从嵌套的API函数返回值

时间:2016-05-09 21:02:15

标签: javascript function api nested

我有一个名为wikiCount的函数,我正在使用它从这样的API中包装另一个函数:

 var wikiCount = function(wikiPage, word){

      wtf_wikipedia.from_api("Toronto", "en", function(markup){

        var obj = wtf_wikipedia.plaintext(markup)
        var a = obj.toLowerCase().split(" ").count(word)
        return a

    })
}

如何从嵌套的API函数返回一个值,以便我可以在包装函数中使用它。这样做的全部目的是因为我试图访问函数外的变量“a”。

1 个答案:

答案 0 :(得分:0)

一种很酷的方式是承诺:

var Promise = require('bluebird');

function wikiCount(wikiPage, word){

     return new Promise(function(resolve, reject) {

        wtf_wikipedia.from_api("Toronto", "en", function(markup){

            var obj = wtf_wikipedia.plaintext(markup)
            var a = obj.toLowerCase().split(" ").count(word)

            resolve(a);

        });
    });
}

wikiCount('somePage', 'someWord')
.then(function(result) {
  // do something with the result
  // this is 'a' that you resolved in the function above
});

以上示例使用bluebird promise library。如果您位于支持ES6的浏览器或Node.js运行时中,则可以使用native Promises

以上称为" Promisification":

  

Promisification意味着将现有的promise-unaware API转换为承诺返回API。