2016-05-09 4 views
0

У меня есть функция под названием wikiCount, что я использую, чтобы обернуть другую функцию из API, как это:Как вернуть значение из вложенной функции 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

Что такое API? Вероятно, у них есть документация или примерный код, который поможет в этом. – 4castle

+2

Здесь есть ответы на этот вопрос: [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an -asynchronous-вызов) – 4castle

ответ

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. Если вы находитесь в браузере или в среде Node.js, поддерживающей ES6, вы можете использовать native Promises.

выше упоминаются как «Promisification»:

Promisification означает преобразование существующего обещание, не знает API на обещание возвращающего API.