- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试如下使用 Bluebird 的协程:
var p = require('bluebird');
//this should return a promise resolved to value 'v'
var d = p.coroutine(function*(v) { yield p.resolve(v); });
//however this prints 'undefined'
d(1).then(function(v){ console.log(v); });
这里有什么不正确的地方?
最佳答案
引用 documentation of coroutine
,
Returns a function that can use
yield
to yield promises. Control is returned back to the generator when the yielded promise settles.
所以,函数可以使用yield
,但yield
不用于从函数返回值。无论您使用 return
语句从该函数返回什么,都将是协程函数的实际解析值。
Promise.coroutine
只是让 yield
语句等待 Promise 解决,实际的 yield
表达式将被评估为解析值。
在你的情况下,表达式
yield p.resolve(v);
将被评估为 1
并且由于您没有从函数显式返回任何内容,默认情况下,JavaScript 返回 undefined
。这就是为什么你会得到 undefined
作为结果。
要解决这个问题,您实际上可以像这样返回产生的值
var p = require('bluebird');
var d = p.coroutine(function* (v) {
return yield p.resolve(v);
});
d(1).then(console.log);
关于javascript - Bluebird 协程使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30960764/
在我的设置中,我试图有一个界面 Table继承自 Map (因为它主要用作 map 的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变的映射,而本地的将有一个只有本地条目的映射。
Rust Nomicon 有 an entire section on variance除了关于 Box 的这一小节,我或多或少地理解了这一点和 Vec在 T 上(共同)变体. Box and Vec
我是一名优秀的程序员,十分优秀!