Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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
有没有办法将回调函数转换为TypeScript/JavaScript中的生成器?_Javascript_Typescript_Callback_Axios_Generator - Fatal编程技术网

有没有办法将回调函数转换为TypeScript/JavaScript中的生成器?

有没有办法将回调函数转换为TypeScript/JavaScript中的生成器?,javascript,typescript,callback,axios,generator,Javascript,Typescript,Callback,Axios,Generator,我正在使用Axios调用具有进度指示器的api端点。我想把onUploadProgress转换成发电机 有没有办法转换这个代码 setProgress({state:'syncing',进度:0}); 等待axios.post(uri.serialize(parsedURI)),body2{ 标题:{session_id:sessionId}, onUploadProgress:(进度)=>{ setProgress({state:'syncing',progress:progress.load

我正在使用Axios调用具有进度指示器的api端点。我想把onUploadProgress转换成发电机

有没有办法转换这个代码

setProgress({state:'syncing',进度:0});
等待axios.post(uri.serialize(parsedURI)),body2{
标题:{session_id:sessionId},
onUploadProgress:(进度)=>{
setProgress({state:'syncing',progress:progress.loaded/progress.total});
},
});
setProgress({state:'syncing',progress:1});
像这样的事情

yield{state:'syncing',进度:0};
等待axios.post(uri.serialize(parsedURI)),body2{
标题:{session_id:sessionId},
onUploadProgress:(进度)=>{
产生{state:'syncing',progress:progress.loaded/progress.total};
},
});
产生{状态:'同步',进度:1};
问题在于onUploadProgress内部的收益率,我在想,当你想将回调转换为你使用的承诺时,可能会有一种方法来使用它

newpromise(resolve=>fn(resolve));
也许有一些有效的方法可以用于发电机,比如

新生成器(next=>fn(next));

您可以在进度处理程序中更新局部变量,并在循环中轮询它,直到请求完成。这是一张草图:

letdelay=n=>newpromise(res=>setTimeout(res,n));
异步函数请求(n,onProgress){
for(设i=0;iprog=n)
.然后(r=>res=r);
而(!res){
等待延迟(1);
如果(前进>前进)
收益率prevProg=prog;
}
result.res=res;
}
异步函数main(){
让结果={}
对于等待(让requestWithProgress的prog(结果))
console.log(prog)
console.log(结果)
}

main()在生成器函数内部b)将
genPromise=…
放入循环中以避免重复c)完全删除
resultPromise
,而不是
返回来自生成器的结果d)通过将结果存储为
stop
上的属性而不是调用
resultResolver
。您认为如何使用这个“生成器”?如果没有这些,你的问题就很不清楚了。根据目前为止的答案,似乎生成器并不是这项工作的合适工具——坚持回调,或者使用pubsubpattern@Bravo异步生成器可以很好地完成这项工作,但是OP还没有说明它们是他的意思。@Bergi-我不认为异步生成器在尝试从多次调用的回调中生成值时会有什么帮助-即使可以,代码对您来说也是混乱和麻烦的maintain@Bravo这是完全可行的,尽管您是对的,当回调调用的速度比异步迭代快时,需要一个函数来处理每个回调调用参数。