我正在研究JavaScript中的Promises.我很有兴趣将ECMAScript Promises与其他实现结合起来,例如jQuery $.Deferred.当Promises.alljQuery工作正常时,我感到很惊讶$.Deferred.我试图在jQuery源代码和CommonJS Promises/A规范中找到答案,但我仍然误解了为什么这段代码按照我的预期工作(console.log10秒后做,不是5秒):
var promise = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve();//resolve first promise after 5 secs
console.log('Promise resolved');
}, 5000);
});
var deferred = $.Deferred();
setTimeout(function () {
deferred.resolve();//resolve after 10 seconds
console.log('Deferred resolved');
}, 10000);
Promise.all([promise,deferred]).then(function () {
console.log('All is done');//log after 10 seconds
});
Run Code Online (Sandbox Code Playgroud)
你有什么想法?
Promise.all必须依靠某些领域或方法$.Deferred来理解是否解决了.那个方法/领域是什么?
我正在尝试使用 websocket 连接将文件发送到我的服务器:我已经使用 java Spring 实现了 websocket 服务器端,每次我使用“blob”从客户端发送二进制消息时,出于某种原因,客户端在 javaScript 中或“arraybuffer。服务器将消息识别为文本消息而不是二进制消息。我在这里遗漏了什么?
客户端
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Chat</title>
</head>
<body>
<h2>File Upload</h2>
Select file
<input type="file" id="filename" />
<br><br><br>
<input type="button" value="Connect" onclick="WebSocketTest()" />
<br><br><br>
<input type="button" value="Upload" onclick="sendFile()" />
<script>
"use strict"
var ws;
function WebSocketTest()
{
if ("WebSocket" in window)
{
console.log("WebSocket is supported by your Browser!");
// Let us open a web socket
ws = new WebSocket("ws://xx.xx.xx.xx:yyyy/service/audioHandler");
ws.onopen = function()
{
// Web Socket …Run Code Online (Sandbox Code Playgroud) 我正在使用javascript在浏览器中创建钢琴.为了让我同时多次播放相同的键,而不是只播放Audio对象,我克隆它并播放克隆,否则我必须等待音频完成或重新启动它,我不知道我想要.
我做过这样的事情:
var audioSrc = new Audio('path/');
window.onkeypress = function(event) {
var currentAudioSrc = audioSrc.cloneNode();
currentAudioSrc.play();
}
Run Code Online (Sandbox Code Playgroud)
问题是,我正在检查chrome的检查器,我注意到每次克隆对象时,浏览器都会再次下载它

我检查了一些想要实现类似功能的人,并注意到他们中的大多数都遇到了同样的问题,他们重新下载了文件.我发现可以同时多次播放相同音频源的唯一示例是SoundJs http://www.createjs.com/SoundJS
我尝试检查源可能但无法弄清楚它是如何完成的.任何的想法?
我尝试使用以下代码在Appium上成功滚动:
// java
JavascriptExecutor js = (JavascriptExecutor) driver;
HashMap<String, String> scrollObject = new HashMap<String, String>();
scrollObject.put("direction", "down");
scrollObject.put("element", ((RemoteWebElement) element).getId());
js.executeScript("mobile: scroll", scrollObject);
Run Code Online (Sandbox Code Playgroud)
但是,由于已知的appium问题,在尝试滚动超出UITableView底部时出现javascript错误:https: //github.com/appium/appium/issues/4836
这个问题与appium的isDisplayed()方法一起总是返回true(无论单元格是否在屏幕上可见),而appium无法点击不可见的单元格,意味着appium无法滚动和选择对象.
有没有人找到解决这个问题的方法?
我们正在使用 React 并且有类似这样的代码:
const isDescendant = (predicateFn, child) => {
let node = child.parentNode;
while (node !== null) {
if (predicateFn(node)) return true;
node = node.parentNode;
}
return false;
}
componentDidMount() {
const nodeIsModal = () => // ...
const onBodyClick = (e) => {
if (isDescendant(nodeIsModal, e.currentTarget)) {
this.tryToClose();
}
};
document.addEventListener('click', onBodyClick);
}
Run Code Online (Sandbox Code Playgroud)
这似乎可行,但是当我们单击DOM 中的某些isDescendant元素并开始沿着 DOM 树向上行走时,e.currentTarget突然停止,因为node.parentNodereturns null。问题是,当单击“检查元素”时,我们清楚地看到该节点位于 DOM 树的中间,并且显然有一个父节点。看起来返回的节点(或其祖先)e.currentTarget以某种方式与真实的 DOM 树分离。
React 是否在这里做了一些导致这种行为的事情,或者我们是否在以其他方式欺骗自己?
我有一些wtfjs代码:
var a = [,];
alert(a.indexOf(a[0]));
Run Code Online (Sandbox Code Playgroud)
a.indexOf(a[0])回报-1.这个例子的要点是uninitialized和undefined值之间的区别:
a 包含一个未初始化的元素.
a[0]回来undefined.
a不包含undefined值.所以a.indexOf(a[0]) === -1是true.
但在哪里我可以找到解释为什么a[0]回归undefined?调用什么内部方法?
PS Undefined是javascript原始类型.Uninitialized表示没有任何javascript类型的值,但javascript中没有这样的原始类型.
我正在使用ui-calendar(女巫基于fullCalendar),默认持卡时间= '00:30:00'.我想把它改成'00:15:00'.
我的配置对象:
/* config object */
$scope.uiConfig = {
calendar:{
height: 450,
editable: true,
duration: '00:15:00',
slotDuration: '00:15:00',
header:{
left: 'title',
center: '',
right: 'today prev,next'
},
eventClick: $scope.alertOnEventClick,
eventDrop: $scope.alertOnDrop,
eventResize: $scope.alertOnResize
}
};
Run Code Online (Sandbox Code Playgroud)
我有一个简单的angularjs测试实例.它使用全局但警报标签未运行.这是codechool的第一个例子.
为什么不运行?
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="Scripts/angular.js"></script>
</head>
<body ng-controller="StoreController">
<script type="text/javascript">
function StoreController() {
alert("hello");
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我有一个ul元素可变的li元素.我希望最后一个li元素始终填充第一行的剩余空间,或者,如果小于预定义的最小值,我希望它移动到一个新行.
图表展示:

我已经尝试过浮动左,浮右,显示块,内联,内联块,表格,最小宽度等各种组合.我无法使其工作.如果有必要,我愿意做javascript路线,但首先我想看看是否有人能在我的CSS中找到它
我的代码适用于同一个域.
但是当我在跨域使用 dataType:'jsonp'和crossDomain:true
代码示例时 -
var fa = new FormData();
fa.append("upload_pass", document.getElementById("upload_pass").files['0']);
$.ajax({
url: 'http://xxx.xx.xx.xx/upload.php',
data: fa,
contentType: false,
processData: false,
dataType: 'jsonp',
crossDomain: true,
type: 'GET',
success: function(data) {
alert(data);
}
});
Run Code Online (Sandbox Code Playgroud)
是否有任何概念性理解差距或编码问题.
请建议.
我正在尝试选择并单击不包含类".bar"的类".foo"的元素.
我想使用这样的代码,但它不起作用:
var inputs = document.getElementsByClassName('foo:not(bar)');
for(var i=0; i<inputs.length;i++) {
inputs[i].click();
}
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
我需要检查数组中是否包含某些特定值.我可以这样:
if($.inArray('Z', arr) != -1){
..
}else if($.inArray('A', arr) != -1){
..
}else if($.inArray('G', arr) != -1){
..
}else if($.inArray('T', arr) != -1){
......
Run Code Online (Sandbox Code Playgroud)
或者更短:
if($.inArray('Z', arr) != -1) || ($.inArray('A', arr) != -1) || ($.inArray('G', arr) != -1) ||($.inArray('T', arr) != -1) ... {
Run Code Online (Sandbox Code Playgroud)
但是我的代码有更短的版本吗?谢谢
javascript ×9
jquery ×4
angularjs ×2
java ×2
ajax ×1
angular-ui ×1
appium ×1
audio ×1
automation ×1
cross-domain ×1
css ×1
dom ×1
es6-promise ×1
fullcalendar ×1
html ×1
html-lists ×1
html5 ×1
promise ×1
reactjs ×1
spring ×1
testing ×1
websocket ×1