我有一个名为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”。
答案 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 Promise
s。
以上称为" Promisification":
Promisification意味着将现有的promise-unaware API转换为承诺返回API。