Mein Code ist so
const co = require('co');
function are(){
}
function* abc(){
var a = yield are()
console.log(1)
var b = yield are()
console.log(2)
var c = yield are()
console.log(3)
}
co(abc)
Mein erwartetes Ausführungsergebnis: Die Konsole sollte 1, 2, 3 ausgeben
Bei der Ausführung meldete das Programm jedoch einen Fehler
Ich sollte sagen, es ist meinsyield
后面应该跟function
但是上面的demo中我的yield
后面跟的已经是function
Warum gibt es keine erwartete Ausgabe?
Zweite Schreibweise:
const co = require('co');
function are1(){
}
function are2(){
}
function are3(){
}
function* abc(){
var a = yield are1
console.log(1)
var b = yield are2
console.log(2)
var c = yield are3
console.log(3)
}
co(abc)
.then(data =>{
console.log(data)
})
.catch(err =>{
console.log(err)
})
co
Akzeptiert bereits eine Generatorfunktion. Die obige Schreibmethode kann 1,2,3 nicht auf der Konsole ausgeben
你的
yield
后面跟的不是are
这个函数,而是are
执行后的返回值。其实它等于
yield undefined
,这才是报错的原因。不支持普通函数
看看
co
库的源码就好,报错是co
库报出来的,原因是因为楼上说的返回了undefined
,具体报错代码如下:isPromise
检测是否为Promise
,co
库先尝试将yield
后转换为Promise
,具体参见toPromise
函数:传入的是
undefined
,所以最终toPromise
返回了undefined
,检测不是Promise
,所以就抛出了错误。至于为什么没有输出
1,2,3
的原因,是因为yield
后面的关系,yield
后面是要接受函数作为参数,并且要执行这个函数的,所以yield
后面一般跟着的是异步操作,这个函数就是回调函数,但是的那个函数,所以这么改下就可以了: