Flutter 常用循环函数 forEach map where any every
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter 常用循环函数 forEach map where any every相关的知识,希望对你有一定的参考价值。
参考技术A ```javaList myList=[1,2,3,4];
List newList = newList();
for (var I= 0 ;I < myList.length ; i++) newList.add(myList[I] * 2) ;
```
```python
List myList=[1,2,3,4];
List newList = newList();
for(var I in myList) newList.add( myList[I] * 2 );
```
```python
ListmyList = [1,2,3,4];myList.forEach((v)
print(v);
);
```
```python
var newList = myList.map((v)
return v *2;
);
print(newList.toList());
```
返回满足条件的值
```python
List myList2 = [1,2,3,4,5,6,7];
var newList2 = myList.where((v)
return v > 5;
);
print(newList2.toList()); // 6,7
```
只要有一个满足条件就返回true
```python
var f = myList.any((v)
return v > 5;
);
print(f); // true
```
条件都满足了才能返回true 否则返回false
```python
var f2 = myList.every((v)
returnv > 5;
);
print(f2); // fasle
```
forEach 循环中的 AJAX 函数
【中文标题】forEach 循环中的 AJAX 函数【英文标题】:AJAX function inside forEach Loop 【发布时间】:2021-10-05 02:33:58 【问题描述】:我有一个函数在视图列表中执行 foreach 循环,并且需要为循环中的每个视图发送 AJAX 请求。当它在成功函数中获得结果时,它会检查是否返回了特定的 Id,如果是,则将此视图添加到 selectBox。问题是,当我尝试在 selectBox 上定义 .change 事件时,它给了我一个错误,因为没有添加任何选项。我曾考虑过添加 ajaxStop,但我有其他不同的 AJAX 请求。 有谁知道我怎么能等到那些 Ajax 请求完成,但没有其他请求?
var newdiv = $('<div id="viewListDiv" style ="margin:auto" ></div> ')
var selectBox = $('<select id = "ViewsList" class="form-control" style="width:250px;margin-left: 70px; margin-rigth:70px;" ></select>');
views.forEach(function (view)
_this.continue = true;
var guid = view.search( "type": "resource" )[0].data.guid;
jQuery.ajax(
url: "api/forge/modelderivative/metadata/model",
data:
"urn": urn,
"viewableId": guid,
,
success: function (metadata)
_this.getIds(metadata.data);
if (_this.listdbId.includes(dbId[0]))
var newOpt = new Option(view.data.viewableID, view.data.name);
selectBox.append(newOpt);
_this.listdbId = []
);
);
selectBox = selectBox[0];
selectBox.change(function (opt)
//launch change function
);
【问题讨论】:
使用返回 Promise 的 API(如fetch
或 axios
库)会更轻松。
这能回答你的问题吗? Jquery select change not firing
@thedude jQuery.ajax
确实返回了一个承诺
@Liam 他们的文档说它返回一个 jqXHR
对象,它是 XMLHTTPRequest 对象的超集
JQuery 3 implemented the A+ promise standard I believe。看起来没有人让 jQuery 文档保持最新状态,考虑到它的年龄,这并不奇怪。
【参考方案1】:
它看起来更像是一个纯 Javascript 问题,而不是 Autodesk Forge Viewer。无论如何,无论您选择使用fetch
还是jquery.ajax
,AJAX 调用都是异步工作。我们需要利用 Promise 来确保调用完成。这是您的代码片段的修订版:
const getModel = (view) =>
return new Promise((resolve, reject) =>
let guid = view.search( "type": "resource" )[0].data.guid;
jQuery.ajax(
url: "api/forge/modelderivative/metadata/model",
data:
"urn": urn,
"viewableId": guid,
,
success: function (metadata)
resolve(metadata);
).fail((jqXHR, textStatus) => reject(jqXHR, textStatus));
);
;
const tasks = views.map((view) => getModel(view));
const results = await Promise.all(tasks);
for(let i=0; i<results.length; i++)
let metadata = results[i];
//..
【讨论】:
以上是关于Flutter 常用循环函数 forEach map where any every的主要内容,如果未能解决你的问题,请参考以下文章
forEach() 循环的 Dart/Flutter 批处理?