Kod saya seperti ini
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)
Hasil pelaksanaan jangkaan saya, konsol harus mencetak 1, 2, 3
Tetapi apabila melaksanakan, program melaporkan ralat
Saya harus mengatakan ia milik sayayield
后面应该跟function
但是上面的demo中我的yield
后面跟的已经是function
Mengapa tiada output yang dijangkakan?
Cara penulisan kedua:
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
Sudah menerima fungsi penjana Kaedah penulisan di atas tidak boleh mengeluarkan 1,2,3 pada konsol
Milik anda
yield
后面跟的不是are
这个函数,而是are
执行后的返回值。其实它等于
yield undefined
, ini adalah sebab kesilapan.Fungsi biasa tidak disokong
Cukup lihat kod sumber pustaka
co
Ralat dilaporkan oleh pustakaco
Sebabnya adalah kerana seperti yang dinyatakan di atas,undefined dikembalikan Kod ralat khusus adalah seperti berikut:
co
库的源码就好,报错是co
库报出来的,原因是因为楼上说的返回了undefined
,具体报错代码如下:isPromise
检测是否为Promise
,co
库先尝试将yield
后转换为Promise
,具体参见toPromise
函数:传入的是
undefined
,所以最终toPromise
返回了undefined
,检测不是Promise
,所以就抛出了错误。至于为什么没有输出
1,2,3
的原因,是因为yield
后面的关系,yield
后面是要接受函数作为参数,并且要执行这个函数的,所以yield
isPromise
mengesan sama ada iaPromise
Pustakaco
mula-mula cuba menukaryield
kepadaPromise<. code>, lihat fungsi
toPromise
untuk butiran: 🎜 rrreee 🎜Input adalahundefined
, jadi pada akhirnyatoPromise
mengembalikanundefined
dan pengesanan bukanPromise
, jadi ia adalah kesilapan yang dilemparkan. 🎜 🎜Mengenai mengapa1,2,3
bukan output, ia adalah kerana hubungan di sebalikyield
yield
perlu menerima fungsi sebagai parameter . Dan fungsi ini perlu dilaksanakan, jadihasil
biasanya diikuti oleh operasi tak segerak, tetapi fungsi itu, jadi ubah sahaja seperti ini: 🎜 rrreee