【发布时间】:2016-12-15 19:12:10
【问题描述】:
我刚刚开始使用 Bluebird 的 Promise.coroutine,它是 ES6 中 Generator functions 的承诺版本。
当我创建一个函数并将其放入变量时,一切正常。喜欢:
let success = Promise.coroutine(function* (_context) {
...
});
exports.success = Promise.coroutine(function* (_context) {
...
});
但是当我尝试创建一个独立的函数时。喜欢:
Promise.coroutine(function *success() {
...
});
它从不定义函数,我得到错误:
成功没有定义
如何访问独立的生成器函数?或者更直接,如何创建它?
编辑:
我正在使用 validatejs,它需要异步验证的成功和错误函数:
exports.create = function (req, res) {
var constraints = {
...
}
validate.async(req, constraints).then(Promise.coroutine(success), Promise.coroutine(error));
function success() { //generator
}
function error(e) { //generator
}
}
【问题讨论】:
-
你能显示错误是在哪里引发的吗?你在哪里尝试访问
success? -
那是错误,实际上
success从未定义过。所以在 JS 中调用未定义的对象是一个错误。现在按照Agalo的建议解决了。 -
但是你仍然错过了你尝试使用
success的部分。显示的错误会导致您在问题中未显示的部分代码。 -
我已经添加了必须传递函数的行。
-
函数的名称,无论是否生成器,都只能从函数内部访问,如果该函数直接用作参数。对于
foo(function bar() {}),bar也只能从bar函数本身中访问。var foo = { bar : function bar() {}};也是如此
标签: javascript node.js ecmascript-6 bluebird