【发布时间】:2017-03-25 03:29:31
【问题描述】:
我的 google foo 无法使用这些关键字。
基本上,我试图避免在我正在创建的函数周围一遍又一遍地键入相同的代码结构,所以我想围绕我想要执行的函数创建一个包装器。这很混乱,我似乎无法弄清楚如何用我正在做的事情来“工作”。这是我到目前为止想出的,它不正确,但我把它贴在这里,这样你就可以有基本的想法了。
我正在使用 bluebird 的 Promise 和协程。
包装器:
'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。
【问题讨论】:
-
似乎
resolve未定义?你打算使用Promise.resolve -
我的想法是在原始函数中调用解析,认为包装器会知道如何处理它......
-
是 func 包装器吗?你可以通过决议来资助
-
用 Promise.resolve() 试过了,then 没有被调用。我假设我需要在包装器中调用解析?但是我需要在我提供给它的函数中调用 resolve,这样我就知道它已经完成了......
-
func 是我在“输入部分的函数”包装器中编写的函数,它是带有 module.exports 的文件的别名
标签: javascript node.js