2017-03-24 15 views
-1

私のgoogle fooはこれらのキーワードで私に失敗しています。Nodej関数を受け取り実行する(ラッパーを作成する)関数を作成する

私は、作成している関数の回りに同じコード構造体を何度も繰り返して入力する必要がないので、実行したい関数の周りにラッパーを作成することを考えました。これは厄介で、私がやっていることでこれを "仕事"にする方法を理解できないようです。これは私が今までに思いついたものであり、間違っていますが、ここに貼り付けて基本的な考え方をすることができます。

私はブルーバードの約束とコルーチンを使用しています。

ラッパー:に供給する

'use strict'; 
const Promise = require('bluebird'); 
const {coroutine: co} = require('bluebird'); //Alias coroutine 

module.exports = function(func) { 
    return new Promise((resolve, reject)=>{ 
    co(function*() { 
      try { 
       //Want to execute the function here 
       return func(); 
      } catch(e) { 
       reject(e); 
      } 
     })() 
    }); 
} 

機能:

'use strict'; 
const Promise = require('bluebird'); 
const wrapper = require('./lib.js'); 
let arg1 = 'arg1'; 

wrapper(function(){ 
    //Print the argument then resolve 
    console.log(arg1); 
    resolve(arg1); 
}).then((data)=>{ 
    console.log('done'); 
    console.log(data); 
}) 

私は間違ってトラックにアム?私は解決または議論で誤りを続けています。 本質的に私は、常に約束を宣言し、共同して、私が書いた各機能のために試してみる必要はありません。

+0

はresolve'が定義されていない 'のように思えますか?あなたは 'Promise.resolve'を使用するつもりでした – Ananth

+0

私の考えは、元の関数で解決策を呼び出すことでした。ラッパーが何をするのかを知っていると思っていました... – supreme0100

+0

funcラッパーですか?あなたはファンドに解決を渡すことができます – guest271314

答えて

-1

あなたは正しい方向にいると思いますが、ここには複数の問題があります。

ラッパー:

'use strict'; 
const Promise = require('bluebird'); 
const {coroutine: co} = require('bluebird'); //Alias coroutine 

module.exports = function(func) { 
    return new Promise((resolve, reject)=>{ 
    co(function*() { 
      try { 
       // Assumption: `func` returns a promise 
       // run the function and 
       // then resolve/reject the promise 
       func().then(result => { 
        resolve(result); 
       }).catch(err => { 
        reject(err); 
       }); 
      } catch(e) { 
       reject(e); 
      } 
     })() 
    }); 
} 

機能

がで養うために:

'use strict'; 
const Promise = require('bluebird'); 
const wrapper = require('./lib.js'); 
let arg1 = 'arg1'; 

wrapper(function(){ 
    //Print the argument then resolve 
    console.log(arg1); 
    // must return a promise here 
    return Promise.resolve(arg1); 
}).then((data)=>{ 
    console.log('done'); 
    console.log(data); 
}) 
+0

私が最初に答えを使用すると考えた要点を追加しました。 OPのコメントセクション。 – supreme0100

関連する問題