var myArray = [1, 2, 3, 4, 5, 6]
function myPromise(num){
return new Promise(res => {
window.setTimeout(()=>{
res( console.log("done: " + num) )
},2000)
})
}
myPromise(myArray[0])
.then(x => myPromise(myArray[1]))
.then(x => myPromise(myArray[2]))
.then(x => myPromise(myArray[3]))
.then(x => myPromise(myArray[4]))
.then(x => myPromise(myArray[5]))
Run Code Online (Sandbox Code Playgroud)
现在,如果我执行上面的语句,它将按顺序运行.在我的实际用例中,数组是动态填充的,我需要myPromise()为每个成员执行该函数myArray.
我如何创建一个"可暂停的循环",它将为数组中的每个项循环,执行myPromise并等待承诺得到解决,然后再继续下一次迭代?
tl;博士:
aria-labelledby在这种情况下,屏幕阅读器会正确处理吗?例如,考虑这个自定义元素:
(function () {
let template = document.createElement('template')
template.innerHTML = `
<svg viewBox="0 0 206 74"
fill="none"
xmlns="http://www.w3.org/2000/svg"
role="img"
aria-labelledby="logo-title">
<title id="logo-title"><slot>Logo of Some Company.</slot></title>
<path d="..." fill="..."/>
</svg>
`
class Logo extends HTMLElement {
constructor () {
super()
let shadowRoot = this.attachShadow({mode: 'open'})
shadowRoot.appendChild(template.content.cloneNode(true))
}
}
customElements.define('company-logo', Logo)
})()
Run Code Online (Sandbox Code Playgroud)
这样做是否有效:
<company-logo>
Title One.
</company-logo>
<company-logo>
Some other title.
</company-logo>
Run Code Online (Sandbox Code Playgroud)
这会是一个有效的 DOM,即使两者<title>共享相同的 ID?屏幕阅读器会为第一个徽标读“标题一”,为第二个徽标读“其他标题”吗?
"Clojure编程"(Emerick,O'Reilly)指出:
(...)如果一个新值如果从当前事务开始以来由另一个事务提交,则不能提供在事务开始时的ref的新值.有帮助的是,STM注意到了这个问题并维护了事务中涉及的ref状态的有界历史,其中历史的大小随每次重试而增加.这增加了 - 在某些时候 - 交易将不再需要重试的机会,因为,当ref被更新地更新时,期望的值仍然存在于历史中.
接下来,他们提供一些代码示例来说明问题.
首先,说明只有在完成所有编写器事务之后,读取事务才会成功(因此a = 500):
(def a (ref 0))
(future (dotimes [_ 500] (dosync (Thread/sleep 20) (alter a inc))))
@(future (dosync (Thread/sleep 1000) @a))
; 500
(ref-history-count a)
; 10
Run Code Online (Sandbox Code Playgroud)
第二,说明设置:min-history并:max-history可以帮助读取器事务重试(此时a已成功读取 - 值33):
(def a (ref 0 :min-history 50 :max-history :100))
(future (dotimes [_ 500] (dosync (Thread/sleep 20) (alter a inc))))
@(future (dosync (Thread/sleep 1000) @a))
; 33
Run Code Online (Sandbox Code Playgroud)
我确实理解为什么deref读者内部事务导致它重试(当某些编写器事务正在提交对ref的更改时).我不明白的是这一部分:"这增加了 - 在某些时候 - 交易不再需要重试的机会,因为,当ref得到最新更新时,所需的值仍然存在于历史中".
什么是"期望值"?在上面的例子中,ref历史如何随时间变化?有人可以给我一个解释或一些示例,时间表显示ref历史是如何工作的吗?
我正在尝试用Reagent/React构建一个Hello World应用程序.我使用:value/ :on-changecombo 将输入与原子绑定.但是,当我输入时,输入仍为空:
(defn new-user []
; Atom declared in an inner `let`.
(let [v (atom "")]
[:div
[:input {:type "text"
:value @v
:on-change (fn [evt]
(reset! v (-> evt .-target .-value)))
}]]))
(defn app [state]
[:div
[:p "State" (pr-str @app-state)]
[new-user]])
(r/render-component [app app-state]
(.-body js/document))
Run Code Online (Sandbox Code Playgroud)
如果我将原子移出let,它将起作用:
; Atom is now top-level.
(defonce v (atom ""))
(defn new-user []
[:div
[:input {:type "text"
:value @v
:on-change (fn [evt]
(reset! v (-> evt .-target …Run Code Online (Sandbox Code Playgroud) 我在CSSTransitionGroup元素出现在DOM中时,或者当它离开DOM时,我用它来动画.它运作良好.
现在 - 我想对这个组件进行单元测试.我正在创建一个临时DOM节点,我将它附加到<body>,我将我的组件渲染到它,然后我执行一些操作.因此,我希望子DOM节点消失.
问题:应用 动画类,组件保留在DOM中,直到CSS动画结束.这意味着我的测试也应该等待几百毫秒才能断言该元素消失.我不能这样做 - 我希望我的测试很快,因为那些是单元测试.
问题: 有没有办法在不向组件添加额外选项的情况下禁用CSS过渡?
我尝试过:
单元测试本身运行良好.我可以通过将参数传递给我的组件来摆脱动画,这将使它不被使用CSSTransitionGroup.所以 - 最糟糕的情况 - 我会做到这一点.但我正在寻找更好的解决方案.
我还可以断言"-enter"/" - enter-active"/" - leave"/" - leave-active"类存在于有问题的元素上.这看起来有点像hacky,因为我可以想象一个应用这些类的错误,但是元素将保留在DOM中.我宁愿不采用这种方法.
在Common Lisp中,let使用绑定列表,即:
(let ((var1 1)
(var2 2))
...)
Run Code Online (Sandbox Code Playgroud)
虽然Clojure使用向量代替:
(let [a 1
b 2]
...)
Run Code Online (Sandbox Code Playgroud)
除了可读性之外,Clojure使用向量是否有任何具体原因?
我正在尝试使用ClojureScript编写用于使用的项目的赛普拉斯测试lein-cljsbuild.使用以下配置,我能够将单个测试命名空间编译为单个.js文件:
:cljsbuild
{:builds [{:id "cypress"
:source-paths ["test/cypress"]
:compiler {:optimizations :simple
:main "specs.login-spec"
:output-to "cypress/integration/login_spec.js"
:output-dir "test-resources/cypress/js/build/"}}]}
Run Code Online (Sandbox Code Playgroud)
以上工作正常,并在赛普拉斯正确执行.
现在我想缩放它.这是我的要求:
specs.login-spec,specs.shopping-cart-spec,specs.checkout-spec等等(我希望有几十那些).lein cljsbuild auto …应该仍然有效,并使用增量构建.我该如何做到这一点?
最天真的方法是为每个规范指定一个构建计划.但这意味着对于N规格,我需要运行编译N次.那将是非常缓慢的.
突然出现在我脑海中的另一个想法是ClojureScript模块,但以下设置会发出空文件:
{:id "cypress"
:source-paths ["test/cypress"]
:compiler {:optimizations :simple
:output-dir "test-resources/cypress/js/build/"
:modules {:m1 {:output-to "cypress/integration/login_spec.js"
:entries #{"specs.login-spec"}}
:m2 {:output-to "cypress/integration/checkout_spec.js"
:entries #{"specs.checkout-spec"}}}}}
Run Code Online (Sandbox Code Playgroud)
我的spec文件现在非常简单 - 单独地,它们在赛普拉斯编译和运行就好了.例:
(ns specs.login-spec
(:require [tools.commands]
[tools.interop :refer [cy describe it]]))
(describe "Lorem" (fn []
(describe "Ipsum" (fn …Run Code Online (Sandbox Code Playgroud) 我需要在不同节点进程或集群之间共享一些对象或完整模块,我搜索了很多博客但没有得到满意的答案。
如果这是不可能做到的,那么有什么想法可以解决这个问题吗?
真的很难让这个工作,我只需要循环一个图像序列.它是25fps,持续时间恰好是一秒(1500)我需要这个基本上循环30分钟,所以它将循环30次.使用FFMPEG,这里是工作的1500帧转换为MP4,就像我说它必须是30分钟长度:
ffmpeg -i "input_%04d.jpg" -c:v libx264 -b:v 1M -s 1080x810 -crf 28 -r 25 -pix_fmt yuv420p out.mp4
Run Code Online (Sandbox Code Playgroud) 我是角度jS和while的新手.我正在使用节点服务器在本地部署我的应用程序.在Chrome浏览器中面对此错误.
PFB我的代码
Demo.html
<html ng-app="Demo">
<head>
<script type="text/javascript" src="lib/angular.1-2-13.min.js"></script>
<script type="text/javascript" src="lib/angular-route.1-2-13.min.js"> </script>
</head>
<body ng-controller="DemoController">
USA<input type='radio' name='txt1' ng-model="value" ng- change="changeValue(value)" value="USA"> Non-USA<input type='radio' name='txt1' ng-model="value" ng-change="changeValue(value)" value="NUSA">
<select ng-model="selectedItem" ng-options='option.name for option in optionValues'>
</select>
<input type='text' name='txt1' ng-model='txtValue'/>
<input type='button' name='b1' ng-click='takeValue(txtValue)'/>
<a href="#/about">routing</a>
<div ng-view></div>
<script type="text/javascript">
var demo = angular.module( "Demo", ['ngRoute'] );
demo.config(['$routeProvider','$locationProvider', function ($routeProvider,$locationProvider) {
$routeProvider
// Pages
.when("/about", {templateUrl: "/Users/smundhe/Desktop/NewProject/Demo2.html",controller: "Demo2Controller"})
// else 404
.otherwise("/404", {templateUrl: "partials/404.html",controller: "PageCtrl"});
//$locationProvider.html5Mode(true);
}]);
demo.controller(
"DemoController", …Run Code Online (Sandbox Code Playgroud) 我正在解决OCaml 教程之一中发布的问题。其中之一是编写一个函数来计算列表的长度。它应该是尾递归的。
朴素的非尾递归解决方案是:
let rec length_naive xs = (** Not tail recursive *)
match xs with
| [] -> 0
| _ :: xs -> 1 + length_naive xs;;
(length_naive [@tailcall]) [1, 2, 3, 4];;
let one_hundred_million = 100000000;;
let non_tail_result = length_naive(List.init one_hundred_million (Fun.id));;
print_endline("Non-tail-recursive result: " ^ string_of_int(non_tail_result));;
Run Code Online (Sandbox Code Playgroud)
编译和运行它完全按照预期工作。打印警告(由于@tailcall),并且由于堆栈溢出而执行失败:
$ ocamlc lib/so.ml
File "lib/so.ml", line 14, characters 0-39:
14 | (length_naive [@tailcall]) [1, 2, 3, 4];;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning 51 [wrong-tailcall-expectation]: expected tailcall
$ ./a.out …Run Code Online (Sandbox Code Playgroud) clojure ×2
javascript ×2
reactjs ×2
angularjs ×1
common-lisp ×1
compilation ×1
cypress ×1
ffmpeg ×1
html ×1
leiningen ×1
let ×1
lisp ×1
node.js ×1
ocaml ×1
reagent ×1
shadow-dom ×1
stm ×1
unit-testing ×1