2016-05-09 16 views
0

私は、このようなAPIから別の関数をラップするために使用してい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 

    }) 
} 

を私はそれをラッパー関数で使用することができます。これを行う目的は、関数の外側で変数 "a"にアクセスしようとしているためです。

+0

APIとは何ですか。彼らはおそらくこれに役立つドキュメンテーションまたはサンプルコードを持っています。 – 4castle

+2

この質問に対する回答はここにあります:[非同期呼び出しからの応答を返すにはどうすればいいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -asynchronous-call) – 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を使用しています。 ES6をサポートするブラウザまたはNode.jsランタイムを使用している場合は、native Promisesを使用できます。

上記「Promisification」と呼ばれる。

Promisificationは約束戻しAPI既存の約束非対応APIに変換します。

関連する問題