2017-03-01 12 views
1

私は約束を処理するために返信し、.then()でチェーンします。私はしかし、コールバックを期待し、約束を返さないサードパーティのライブラリを使用する必要があります。明確にするためにコールバックロジックベースのライブラリ関数を約束チェーンに組み込む

、偽の例:

person.sayHello() 
    .then(response => introduceMyself()) 
    .then(name => externalLibrary.storeAndGetInfo(name)) 
    .then(info => saySomeInfo(info)) 
    .catch(err => console.log(err)); 

introduceMyself(){ 
    return asyncFunctionToGetAndSayMyName(); 
} 

sayDomeInfo(info){ 
    console.log(info); 
} 

私の問題はexternalLibrary.storeAndGetInfoは、これらのparamsを期待していることである:

storeAndGetInfo(string, callback(valueThatINeedForMyNextChainedFunction)); 

私はチェーン可能機能で外部ライブラリ関数をラップする可能性が感じています(約束を返すもの)、そしてthe libraryqを使用してコールバック関数を延期して解決しますが、実際に実装するのか分からないので固執しています。それとも別の方法がありますか?

PSそれは違いを作る場合には、これはangularjsアプリで

+0

を[ Angularの$ qライブラリ](https://docs.angularjs.org/api/ng/service/$q)を使用して、AngularJSダイジェストサイクルと統合された約束をしてください。外部ライブラリからの約束は、デバッグの難しい問題を引き起こします。 – georgeawg

答えて

1

であるあなたがAA繰延約束返す関数を使用して外部ライブラリの呼び出しをラップする必要があります使用AngularJSフレームワークについて

function promisedStore (name) { 
    var deferred = Q.defer(); //initialize deferred 

    externalLibrary.storeAndGetInfo(name, function(error, result) { 
    if (error) { 
     deferred.reject(new Error(error)); //reject promise if error in cb 
    } else { 
     deferred.resolve(result); //resolve promise if no error in cb 
    } 
    }); 

    return deferred.promise; 
} 
+1

はい、それです!私は近くにいたが、十分に近づいていなかった:-) 7分で受け入れる – ghego1

関連する問題