Koajs产生函数返回值

时间:2016-04-05 20:16:40

标签: javascript node.js koa

在expressjs中,我通常使用如下的异步函数:

function foo(callback) {
  var bar = {a: 1, b: 2};
  callback(null, bar);
}

foo(function(err, result) {
  // result is {a: 1, b: 2}
});

在Koajs中,我在路线功能中使用yield,如下所示:

function foo(callback) {
  var bar = {a: 1, b: 2};
  callback(null, bar);
}
var result = yield foo.bind(null); // [{a: 1, b: 2}]

我希望结果是{a: 1, b: 2},但实际上结果是数组[{a: 1, b: 2}]

那么,我怎样才能获得koajs的期望值?

1 个答案:

答案 0 :(得分:0)

除了Koa vs Co shenanigans之外,你应该真正宣传你的异步方法,最好是修改原始功能(如果你有可能):

function foo() {
    let bar = { a: 1, b: 2 };
    return Promise.resolve(bar);
}

let data = yield foo();

如果那个不是的可能性(转换的函数太多,仍在其他地方用作回调,使用其他人的函数等),你可以像这样包装它们:

function fooPromise() {
    return new Promise((resolve, reject) => {
        // assume foo is defined externally
        foo((err, result) => {
            if (err)
                return reject(err);
            return resolve(result);
        });
    });
}

let data = yield fooPromise();

有些库会为你包装回调方法,例如bluebird,但如果只有少数几个要覆盖它们,那么你自己就可以直截了当了。