Nodejs创建一个接受函数并执行它的函数(创建一个包装器)

时间:2017-03-24 19:03:28

标签: javascript node.js

我的谷歌foo让我失败了这些关键字。

基本上我试图消除围绕我正在创建的函数一遍又一遍地输入相同的代码结构,所以我想创建一个围绕我想要执行的函数的包装器。这很麻烦,我似乎无法弄清楚如何使这与我正在做的“工作”。这是我到目前为止提出的,它不正确,但我把它贴在这里,所以你可以有基本的想法。

我使用蓝鸟的承诺和合作例程。

打包机:

'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);
})

我走错了路吗?我一直在决心或争论中出错。 基本上我只是不想不断地为我写的每个函数声明promise,co和try / catch。

1 个答案:

答案 0 :(得分:-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);
})