当前位置: 首页 > Web前端 > HTML5

PromiseChaining

时间:2023-04-05 19:21:33 HTML5

JavaScript中的Promises通常被定义为最终可用的值的代理。问题背景回调:我们有一系列异步任务要一个接一个地执行——例如,加载一个脚本。我们如何才能很好地编写代码?Promises提供了几种方法来做到这一点:Promisechaining。看起来像这样:newPromise(function(resolve,reject){setTimeout(()=>resolve(1),1000);//(*)}).then(function(result){//(**)alert(result);//1returnresult*2;}).then(function(result){//(***)alert(result);//2returnresult*2;}).then(function(result){alert(result);//4返回结果*2;});这个想法是结果通过.then处理程序链传递。流程是:最初的promise在1秒内解析(*),然后调用.then处理程序,它返回一个新创建的Promise(用2个值解析)。然后下一个获取前一个的结果,对其进行处理(加倍)并将其传递给下一个处理程序。等等。请记住,每次调用.then都会返回一个新的Promise,因此我们可以调用下一个.then。当处理程序返回一个值时,它成为该Promise的结果,因此调用下一个.then。初学者常犯的一个错误是在同一个promise对象上重复调用then方法。这不是链接承诺。让promise=newPromise(function(resolve,reject){setTimeout(()=>resolve(1),1000);});承诺。then(function(result){alert(result);//1返回结果*2;});promise.then(function(result){alert(result);//1返回结果*2;});promise.then(function(result){alert(result);//1返回结果*2;});我们在这里所做的只是一些Promise的处理程序。他们不会将结果传递给对方;相反,他们独立处理它。所有.then在同一个Promise上得到相同的结果——那个Promise的结果。所以在上面的代码中,所有警报都显示相同的值:1.实际上,我们很少需要一个Promise的多个处理程序。链接调用使用得更频繁。