为什么这个生成器 return 是一个函数而不是一个值
Why does this generator return a function instead of a value
本质上,我正在尝试使用我的 koa 应用程序发出 http 请求,并且想知道我到底做错了什么
var request = require('koa-request');
var beatsGen = beats();
var response1 = beatsGen.next().value;
function *beats (){
var options = {
url: 'https://api.github.com/repos/dionoid/koa-request',
headers: { 'User-Agent': 'request' }
};
var response = yield request(options);
}
当我控制台记录 response1 时,这就是我得到的结果
respone from beats is function (callback) {
_request(uri, options, function (error, response, body) {
callback(error, response);
})
}
我认为 response1 是某种类型的对象,包含回调的主体参数而不是函数本身。那么为什么我得到的函数是生成器 .next().value?
我是生成器和 koa 的新手,所以我假设我在这里犯了一个愚蠢的错误。
koa-request
或 returns thunks 或 promises/thenables 用于异步调用的任何其他库旨在与协程库一起使用,如 co
或koa
Web 应用程序框架,它使用 co
来处理基于生成器的控制流。
ECMAScript 6 生成器不支持异步,但 ECMAScript 7 将 async and await 本地处理此问题。
声明
var response1 = beatsGen.next().value;
returns 值returned by the first yield statement in beats, which is the thunk returned by request(options)
。协同例程感知库将检查 generator.next().value
中的 return 值并等待回调执行或 then
能够在通过调用 generator.next()
恢复生成器主体之前解决再次.
这样的库是co
:
var request = require('koa-request'),
co = require('co');
function beats (){ //doesn't have to be a generator function
var options = {
url: 'https://api.github.com/repos/dionoid/koa-request',
headers: { 'User-Agent': 'request' }
};
return request(options); //return the thunk
}
co(function *() {
var response1 = yield beats;
//use response
})
如果要与 koa
一起使用:
app.use(function *() {
this.body = yield beats();
});
顺便说一句,koa-request
最好命名为 co-request
,因为所有协程包装器都以 co-
.
为前缀
本质上,我正在尝试使用我的 koa 应用程序发出 http 请求,并且想知道我到底做错了什么
var request = require('koa-request');
var beatsGen = beats();
var response1 = beatsGen.next().value;
function *beats (){
var options = {
url: 'https://api.github.com/repos/dionoid/koa-request',
headers: { 'User-Agent': 'request' }
};
var response = yield request(options);
}
当我控制台记录 response1 时,这就是我得到的结果
respone from beats is function (callback) {
_request(uri, options, function (error, response, body) {
callback(error, response);
})
}
我认为 response1 是某种类型的对象,包含回调的主体参数而不是函数本身。那么为什么我得到的函数是生成器 .next().value?
我是生成器和 koa 的新手,所以我假设我在这里犯了一个愚蠢的错误。
koa-request
或 returns thunks 或 promises/thenables 用于异步调用的任何其他库旨在与协程库一起使用,如 co
或koa
Web 应用程序框架,它使用 co
来处理基于生成器的控制流。
ECMAScript 6 生成器不支持异步,但 ECMAScript 7 将 async and await 本地处理此问题。
声明
var response1 = beatsGen.next().value;
returns 值returned by the first yield statement in beats, which is the thunk returned by request(options)
。协同例程感知库将检查 generator.next().value
中的 return 值并等待回调执行或 then
能够在通过调用 generator.next()
恢复生成器主体之前解决再次.
这样的库是co
:
var request = require('koa-request'),
co = require('co');
function beats (){ //doesn't have to be a generator function
var options = {
url: 'https://api.github.com/repos/dionoid/koa-request',
headers: { 'User-Agent': 'request' }
};
return request(options); //return the thunk
}
co(function *() {
var response1 = yield beats;
//use response
})
如果要与 koa
一起使用:
app.use(function *() {
this.body = yield beats();
});
顺便说一句,koa-request
最好命名为 co-request
,因为所有协程包装器都以 co-
.