Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.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/0/asp.net-mvc/16.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 如何使这个递归函数异步? function SetText(gg=`texttttttt_Javascript_Html_Node.js_Websitespark - Fatal编程技术网

Javascript 如何使这个递归函数异步? function SetText(gg=`texttttttt

Javascript 如何使这个递归函数异步? function SetText(gg=`texttttttt,javascript,html,node.js,websitespark,Javascript,Html,Node.js,Websitespark,基本思想是创建一个队列,该队列本质上只是一个数组,单击后在其中推送要显示的文本。然后继续处理队列,直到队列为空 代码可能是这样的 function SetText(gg=`texttttttt基本思想是创建一个队列,该队列本质上只是一个数组,单击后在其中推送要显示的文本。然后继续处理队列,直到队列为空 代码可能是这样的 函数SetText(gg=`texttttttt你能用吗 如果可以的话,这将更容易在给定的超时时间内“暂停”字符串中的每次迭代(请参见下面的handleIterateString

基本思想是创建一个队列,该队列本质上只是一个数组,单击后在其中推送要显示的文本。然后继续处理队列,直到队列为空

代码可能是这样的


function SetText(gg=`texttttttt基本思想是创建一个队列,该队列本质上只是一个数组,单击后在其中推送要显示的文本。然后继续处理队列,直到队列为空

代码可能是这样的

函数SetText(gg=`texttttttt你能用吗

如果可以的话,这将更容易在给定的超时时间内“暂停”字符串中的每次迭代(请参见下面的
handleIterateString
class函数)

此异步
handleIterateString
函数将在每个
await
关键字处“暂停”,并等待
await
表达式返回的承诺得到解决。只有这样,它才会继续执行
async
函数

此外,您还可以“暂停”执行
async
函数,通过字符串启动新的完整迭代(请参见下面
async function SetText
中的
wait demo.handleiteString
调用)

通过这种方式,您可以等待整个迭代(即键入行为)完成,然后减少单击队列计数

如果您的队列中还有click事件,您可以在此时递归调用
SetText


简单地说:使用
async/await
可以更轻松地控制键入行为的速度,并在执行任何其他操作之前等待键入行为完成

尝试运行下面的代码段

类打字机{
/**
*@description将执行延迟一定时间
*@param{number}ms-时间(毫秒)
*@returns{Promise}
*
*@私人
*/
#延迟=(毫秒)=>新承诺((解析)=>设置超时(解析,毫秒));
/**
*@description用于显示队列信息的html
*@returns{{hasQueue:string,noQueue:string}
*@私人
*/
获取#html(){
返回{
hasQueue:`单击队列中等待的事件:${this.state.queueCount}`,
noQueue:'队列已清除',
};
}
/**
*@description呈现队列计数信息
*@returns{void}
*@私人
*/
#renderCountText=()=>{
const hasQueue=this.state.queueCount>0;
const fn=hasQueue?'add':'remove';
document.getElementById('type-btn').classList[fn]('is-danger');
const htmlContent=this.#html[hasque?'hasque':'noQueue'];
this.render(htmlContent,'.queueCount');
};
/**
*@description接受html选择器字符串
*@param{string}选择器
*/
构造函数(选择器){
this.selector=选择器;
}
/**
*@typer实例的描述状态
*@const{{queueCount:number,speed:number}
*@公众
*/
状态={
队列计数:-1,
速度:30,,
};
/**
*@description将html字符串附加到实例的html元素
*@param{string}html
*@returns{void}
*@公众
*/
追加=(html)=>{
document.querySelector(this.selector).innerHTML+=html;
};
/**
*@description使用给定的选择器在元素内呈现给定的html字符串
*@param{string}html
*@param{string}[el]
*@returns{void}
*@公众
*/
render=(html,el=this.selector)=>{
document.querySelector(el).innerHTML=html;
};
/**
*@description确认DOM中存在实例的选择器
*@returns{boolean}
*@公众
*/
exists=()=>!!document.querySelector(this.selector);
/**
*@说明
*-遍历传递的字符串并调用
*字符串中每个字符上传递的侦听器
*-从状态的“速度”属性等待给定时间,
*在继续下一个迭代之前
*
*@param{string}string
*@param{string}listener-调用字符串中每个字符的函数
*@returns{Promise}
*
*@async
*@公众
*/
HandleInterateString=async(字符串,侦听器)=>{
for(让我来看看字符串){
听众(一);
等待这个#延迟(这个.状态.速度);
}
};
/**
*@description将状态中的队列计数增加1
*@公众
*@returns{void}
*/
递增队列=()=>{
this.state.queueCount++;
这是#renderCountText();
};
/**
*将状态中的队列计数减少1
*@公众
*@returns{void}
*/
递减量queue=()=>{
this.state.queueCount--;
这是#renderCountText();
};
}
//实例化演示
const demo=新打字机('.demo');
异步函数SetText(
gg=`小狗汪汪叫了你能用吗

如果可以的话,这将更容易在给定的超时时间内“暂停”字符串中的每次迭代(请参见下面的
handleIterateString
class函数)

此异步
handleIterateString
函数将在每个
await
关键字处“暂停”,并等待
await
表达式返回的承诺得到解决。只有这样,它才会继续执行
async
函数

此外,您还可以“暂停”执行
async
函数,通过字符串启动新的完整迭代(请参见下面
async function SetText
中的
wait demo.handleiteString
调用)

通过这种方式,您可以等待整个迭代(即键入行为)完成,然后减少单击队列计数

如果您的队列中还有click事件,您可以在此时递归调用
SetText


简单地说:使用
async/await