我的谷歌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。
答案 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);
})