首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环内部的承诺问题

循环内部的承诺问题
EN

Stack Overflow用户
提问于 2018-08-29 13:13:53
回答 2查看 65关注 0票数 0

我试图在for循环中调用一个承诺。我需要呼叫才能得到相关的循环项目。我读了一些关于它的文章,但似乎仍然找不出正确的方法。

代码语言:javascript
复制
var params;
var  identifylayers =["parcels", "lots", "gasstation"];
for (i = 0; i < identifylayers.length; i++)
{
        lname = identifylayers[i];

    govmap.intersectFeatures()
    .then(function (e)
    {
       alert( lname);
    });

}

运行功能返回:加油站,加油站,加油站

我要它还回来:包裹,很多,加油站

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-30 09:05:36

隐藏在代码中的是异步魔鬼JavaScript。:D

像这样观察-

  1. 当您的程序流遇到一个promise call (这里是- intersectFeatures().then(fn (){}) )时,它就知道这个调用最终会完成,因此程序流将永远不会尝试执行传递给.then()的回调,相反,它将保证它自身的安全性,并设置一个提醒:一旦intersectFeatures完成,它就需要执行传递给.then()的回调。
  2. 接下来要注意的是.then(callback)将如何访问lname。它由闭包完成。所以
  3. 另一件重要的事情要注意的是,这整个东西是在一个循环内。您的循环不知道其迭代的代码是同步的还是异步的。它的唯一任务是迭代。正如我们前面在第1点中提到的,.then(callback)目前不会被执行。因此,到那时,将执行.then(callback) ,您的循环已经完成,在迭代结束时,lname将持有储气站。因此,您的.then(callback) 只打印加油站

解决方案:

这是一个非常古老的JS解决方案,它迭代异步代码并仍然使用闭包确保适当的变量访问-

代码语言:javascript
复制
    for (i = 0; i < identifylayers.length; i++)
    {
        lname = identifylayers[i];
        (function (lname) {
            govmap.intersectFeatures()
                  .then( function () {
                      alert(lname);
                  } )
        })(lname);

    }

这利用了变量的功能范围和闭包思想的好处。用谷歌搜索更多信息。

它也被称为友化闭包,我只是编了这个:D

干杯!

票数 0
EN

Stack Overflow用户

发布于 2018-08-30 08:56:53

在循环中定义lname。当前,每个迭代都是相同的实例,因此它会被覆盖,然后承诺每次解析并打印最后一次覆盖。

代码语言:javascript
复制
const lname = identifylayers[i];

在异步代码运行之前,它正在变得过度。

代码语言:javascript
复制
async function intersectFeatures() {
  return "OK"
}

var params;
var identifylayers = ["parcels", "lots", "gasstation"];
for (let i = 0; i < identifylayers.length; i++) {
  const lname = identifylayers[i];
  intersectFeatures()
    .then(function(e) {
      alert(lname);
    });

}

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52078349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档