“一点帮助!”使用javascript中的异步语法。我是个老菜鸟,我发现这让我有点沮丧
我只想运行一个异步函数,让它等待,直到它有一个返回值,将该返回值传递给另一个异步函数,然后清洗并重复几次。我看过一些例子,但我正在努力使它们在测试代码中工作。恕我直言,但我不得不为自己造成的鼻血找点乐子 如果不在附加的代码中传递返回值,我甚至无法让它工作,此时我感觉自己非常愚蠢“一点帮助!”使用javascript中的异步语法。我是个老菜鸟,我发现这让我有点沮丧,javascript,async-await,es6-promise,Javascript,Async Await,Es6 Promise,我只想运行一个异步函数,让它等待,直到它有一个返回值,将该返回值传递给另一个异步函数,然后清洗并重复几次。我看过一些例子,但我正在努力使它们在测试代码中工作。恕我直言,但我不得不为自己造成的鼻血找点乐子 如果不在附加的代码中传递返回值,我甚至无法让它工作,此时我感觉自己非常愚蠢 whosOnFirst(1) .then(whatsOnSecond(2)) .then(iDunnosOnthird(3)) 我希望看到执行whosOnFirst1的语法,将返回值传递给whatsOnSecond,
whosOnFirst(1)
.then(whatsOnSecond(2))
.then(iDunnosOnthird(3))
我希望看到执行whosOnFirst1的语法,将返回值传递给whatsOnSecond,并将其返回值传递给iDunnosOnthird。创建所需的输出减去代码段底部引用的空格
我真的很感谢你的帮助
//具有输入/输出参数的任意定时器,用于异步理解;
函数waitSeccallerName,暂停{//
调用了console.log`${callerName},正在等待${pause}秒`
setTimeoutfunction{
console.log`${callerName}在返回中发送了${pause+1},完成了`
return pause+1;//延迟返回值/将1添加到输入参数
},暂停*1000;
}
//谁是第一个-使用输入参数=1首先运行此操作
异步函数whosOnFirsti{
WaitSec谁先上,1.然后结果=>{
返回结果;
}
}
//完成whosOnFirst使用return for param后的第二次运行是什么
异步函数whatsOnSecondi{
WaitSec秒数是多少,i.thenresult=>{
返回结果;
}
}
//iDunno在使用参数返回完成whatsOnSecondi后的第三次运行
异步函数iDunnosOnthirdi{
waitSeciDunno在第三,i.thenresult=>{
返回结果;
}
}
谁先来
.那么接下来呢
.Thenidunosonthird3
//电流输出:
//第一个打电话的是谁,等了1秒钟。。。
//秒叫什么,等2秒。。。
//iDunno打第三个电话,等了3秒钟。。。
//谁先发了2个回音,完成了!
//第二次发送的内容返回3,完成!
//iDunno在第三次发送4作为回报,完成了!
//期望输出:
//第一个打电话的是谁,等了1秒钟。。。
//谁先发了2个回音,完成了!
//秒叫什么,等2秒。。。
//第二次发送的内容返回3,完成!
//iDunno打第三个电话,等了3秒钟。。。
//iDunno在第三次发送4作为回报,完成了 您需要等待这样的结果:
async function main() {
const result1 = await whosOnFirst(1);
// whosOnSecond will not get called except after the whosOnFirst is done.
const result2 = await whosOnSecond(result1);
}
您需要等待这样的结果:
async function main() {
const result1 = await whosOnFirst(1);
// whosOnSecond will not get called except after the whosOnFirst is done.
const result2 = await whosOnSecond(result1);
}
对于异步函数,请使用美观的wait关键字。waitSec函数应该返回一个承诺,而且当您解析承诺时,您的值也会出现。thenres=>console.logres,使用它进行链接,如下所示:
//具有输入/输出参数的任意定时器,用于异步理解;
函数waitSeccallerName,暂停{//
返回新的PromiseSolve,拒绝=>{
调用了console.log`${callerName},正在等待${pause}秒`
setTimeoutfunction{
console.log`${callerName}在返回中发送了${pause+1},完成了`
resolvepause+1;//延迟返回值/将1添加到输入参数
},暂停*1000;
}
}
//谁是第一个-使用输入参数=1首先运行此操作
异步函数whosOnFirsti{
const resp=等待等待等待谁在第一位,1;
返回响应;
}
//完成whosOnFirst使用return for param后的第二次运行是什么
异步函数whatsOnSecondi{
const resp=等待等待秒,i;
返回响应;
}
//iDunno在使用参数返回完成whatsOnSecondi后的第三次运行
异步函数iDunnosOnthirdi{
const resp=等待第三个,i上的Waitseciduno;
返回响应;
}
whosOnFirst1.thenfirstResp=>{
whatsOnSecondfirstResp.thensecResp=>{
iDunnosOnthirdsecResp.thenthirdResp=>{
console.logthirdResp;
}
}
} 对于异步函数,请使用美观的wait关键字。waitSec函数应该返回一个承诺,而且当您解析承诺时,您的值也会出现。thenres=>console.logres,使用它进行链接,如下所示:
//具有输入/输出参数的任意定时器,用于异步理解;
函数waitSeccallerName,暂停{//
返回新的PromiseSolve,拒绝=>{
调用了console.log`${callerName},正在等待${pause}秒`
setTimeoutfunction{
console.log`${callerName}在返回中发送了${pause+1},完成了`
resolvepause+1;//延迟返回值/将1添加到输入参数
},暂停*1000;
}
}
//谁是第一个-使用输入参数=1首先运行此操作
异步函数whosOnFirsti{
const resp=等待等待等待谁在第一位,1;
返回响应;
}
//完成whosOnFirst使用return for param后的第二次运行是什么
异步函数whatsOnSecondi{
const resp=等待等待秒,i;
返回响应;
}
//iDunno在whatsOn完成后第三次运行
Secondi使用参数返回
异步函数iDunnosOnthirdi{
const resp=等待第三个,i上的Waitseciduno;
返回响应;
}
whosOnFirst1.thenfirstResp=>{
whatsOnSecondfirstResp.thensecResp=>{
iDunnosOnthirdsecResp.thenthirdResp=>{
console.logthirdResp;
}
}
} 下面是它的工作原理: 函数延迟毫秒{ 返回新PromiseSolve=>{ 设置超时=>{ 决定 },毫秒; }; } 异步功能测试{ console.log“还没有延迟”; 等待1000; 控制台。记录“1秒后”; 等待1000; 控制台。日志“已过2秒”; 等待3000; 控制台。记录‘哦,看,5秒钟过去了!’; }
试验 下面是它的工作原理: 函数延迟毫秒{ 返回新PromiseSolve=>{ 设置超时=>{ 决定 },毫秒; }; } 异步功能测试{ console.log“还没有延迟”; 等待1000; 控制台。记录“1秒后”; 等待1000; 控制台。日志“已过2秒”; 等待3000; 控制台。记录‘哦,看,5秒钟过去了!’; } 测验工作溶液 您的问题是waitSec与代码的其余部分处于不同的上下文中。你需要把它提升到承诺的上下文中 然后,您就一直拥有promisified代码,并且可以链接承诺。下面是进一步的解释: //具有输入/输出参数的任意定时器,用于异步理解; 函数waitSeccallerName,暂停{// 返回新PromiseSolve=>{ 调用了console.log`${callerName},正在等待${pause}秒` setTimeoutfunction{ console.log`${callerName}在返回中发送了${pause+1},完成了` resolvepause+1;//延迟返回值/将1添加到输入参数 },暂停*1000; } } //谁是第一个-使用输入参数=1首先运行此操作 函数whosOnFirsti{ 返回WaitSec谁在第一,1 } //完成whosOnFirst使用return for param后的第二次运行是什么 函数whatsOnSecondi{ 返回服务员第二排是什么 } //iDunno在使用参数返回完成whatsOnSecondi后的第三次运行 函数iDunnosOnthirdi{ 返回第三个waitSeciDunno's,i } 谁先来 .然后是什么秒 .Thenidunosonthird .thenconsole.logWorking解决方案 您的问题是waitSec与代码的其余部分处于不同的上下文中。你需要把它提升到承诺的上下文中 然后,您就一直拥有promisified代码,并且可以链接承诺。下面是进一步的解释: //具有输入/输出参数的任意定时器,用于异步理解; 函数waitSeccallerName,暂停{// 返回新PromiseSolve=>{ 调用了console.log`${callerName},正在等待${pause}秒` setTimeoutfunction{ console.log`${callerName}在返回中发送了${pause+1},完成了` resolvepause+1;//延迟返回值/将1添加到输入参数 },暂停*1000; } } //谁是第一个-使用输入参数=1首先运行此操作 函数whosOnFirsti{ 返回WaitSec谁在第一,1 } //完成whosOnFirst使用return for param后的第二次运行是什么 函数whatsOnSecondi{ 返回服务员第二排是什么 } //iDunno在使用参数返回完成whatsOnSecondi后的第三次运行 函数iDunnosOnthirdi{ 返回第三个waitSeciDunno's,i } 谁先来 .然后是什么秒 .Thenidunosonthird
.thenconsole.log您正在立即执行回调函数。您需要类似的东西。然后=>whatsOnSecond2a如果您不使用Wait b,则不要使用异步函数语法。然后…需要回调函数-将调用包装在函数表达式中c您的函数需要返回它们正在构建的承诺链d您的waitSec函数。看一看,waitSec也应该回复一个承诺。例如returnnewpromiseres=>setTimeoutres,pause*1000,pause+1这里没有正确使用评论,但我只想对大家说声谢谢!。我感谢大家花时间来减少我的无知……您正在立即执行回调函数。您需要类似的东西。然后=>whatsOnSecond2a如果您不使用Wait b,则不要使用异步函数语法。然后…需要回调函数-将调用包装在函数表达式中c您的函数需要返回它们正在构建的承诺链d您的waitSec函数。看一看,waitSec也应该回复一个承诺。例如returnnewpromiseres=>setTimeoutres,pause*1000,pause+1这里没有正确使用评论,但我只想对大家说声谢谢!。我很感激每个人都花时间试图降低我的无知程度……我重新检查了我的答案,我认为没有那么糟糕,有人能告诉我为什么会投反对票吗?我不知道为什么人们会投你的反对票,但事实上你的链接也是首选的,投了你的赞成票。我重新检查了我的答案,我不认为
有那么糟糕,有人能告诉我为什么投反对票吗?我不知道为什么人们会投你反对票,但你的锁链实际上也是首选,投了你一票。嗨,乔希!这是一个远远超过和超越后IMHO。感谢您提供的所有示例,我将使用此作为参考,因为我需要一段时间才能以这种方式可视化程序流。嗨,Josh!这是一个远远超过和超越后IMHO。感谢您提供的所有示例,我将使用它作为参考,因为在我以这种方式可视化程序流之前需要一段时间。