Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从收益中获得回报*_Javascript_Async Await_Generator - Fatal编程技术网

Javascript 如何从收益中获得回报*

Javascript 如何从收益中获得回报*,javascript,async-await,generator,Javascript,Async Await,Generator,是否有任何方法可以从yield*asyncierator返回 背景: 给定如下异步迭代器: const异步迭代器={ 下一个(){ 返回新承诺(resolve=>setTimeout(()=>resolve('next'),500)) }, 返回(){ 返回承诺。解决(‘返回’) }, [符号.异步迭代器](){ 还这个 } } 以下内容永远不会调用其返回方法: async*yieldFromIterator(){ 收益率“开始” yield*异步迭代器 } const yieldingtit

是否有任何方法可以从
yield*asyncierator
返回

背景:

给定如下异步迭代器:

const异步迭代器={
下一个(){
返回新承诺(resolve=>setTimeout(()=>resolve('next'),500))
},
返回(){
返回承诺。解决(‘返回’)
},
[符号.异步迭代器](){
还这个
}
}
以下内容永远不会调用其
返回方法:

async*yieldFromIterator(){
收益率“开始”
yield*异步迭代器
}
const yieldingtiterator=yieldFromIterator()
console.log(wait yieldingtiterator.next())/“start”
console.log(wait yieldingtiterator.next())/“next”
console.log(wait yieldingierator.return())//从未解析
这也不是:

async*yieldFromIterator(){
收益率“开始”
用于等待(异步迭代器的常量结果){
产量结果
}
}
const yieldingtiterator=yieldFromIterator()
console.log(wait yieldingtiterator.next())/“start”
console.log(wait yieldingtiterator.next())/“next”
console.log(wait yieldingierator.return())//从未解析
当然,以下各项是:

async*returnIterator(){
收益率“开始”
返回异步迭代器
}
const returningIterator=returnIterator()
console.log(waiting returningIterator.next())/“start”
console.log(等待returningIterator.next())/“next”
console.log(等待returningIterator.return())/“return”

非常感谢:)

您的
异步迭代器有一个错误:承诺的实现值(一个实现的对象,其形状为
{done,value}
)。但是你用一根绳子来履行承诺

如果将其更新为返回一个结果对象,您将看到返回:

const异步迭代器={
下一个(){
返回新承诺(resolve=>setTimeout(()=>resolve({value:'next',done:false}),500))
},
返回(){
return Promise.resolve({value:'return',done:true})
},
[符号.异步迭代器](){
还这个
}
}
异步函数*yieldFromIterator(){
收益率“开始”
yield*异步迭代器
}
(异步函数(){
const yieldingtiterator=yieldFromIterator()
console.log(wait yieldingtiterator.next())/{value:'start',done:false}
console.log(wait yieldingtiterator.next())/{value:'next',done:false}
console.log(wait yieldingtiterator.return())/{value:'return',done:true}
})().catch(错误=>{
控制台错误(错误)
})
。作为控制台包装器{
最大高度:100%!重要;

}
FWIW,我在新书的第6章和第9章中对此进行了详细介绍(请参见我的个人资料中的链接/详细信息)。非常感谢您的详细回答-一定会尝试一下您的书:)试试
退货率*。