假设我想在一定时间内阻止Javascript执行出于某种奇怪的原因,我该怎么做呢.JS中没有sleep().请不要说做while()循环,因为那很糟糕.我可以做一个window.showModalDialog并在一个非常小的时间的setTimeout的模态对话框中放置一个window.close,这样用户就不会注意到该对话框.这就像睡眠一段时间,如果需要我可以多次调用.还有其他方法吗?
详细说明,我的用例是HTML5 SQL数据库已经给出了异步api,但我想将它用于一个小商店永远不会大的小型webapp.因此不需要异步api,因为小商店上的查询将在客户端运行.所以我想编写一个带有sync api的ORM,以便开发人员可以更轻松地使用它.要将此异步桥接到同步api,我需要像睡眠这样的东西.
我正在尝试以编程方式使用Chrome(Build 43)中的execCommand将异步JSONP请求的结果复制到剪贴板.这是一个逻辑片段:
loadContent()
function loadContent(callback) {
$.getJSON('http://www.randomtext.me/api/lorem/p-5/10-20?&callback=myFunc',function(result){
console.log('result=',result.text_out);
$("#container").html(result.text_out);
if (callback) {
callback();
}
});
}
function copyAjax() {
loadContent(copy);
}
function copy() {
var copyDivText = $('#container').text();
console.log('copyDivText=',copyDivText);
executeCopy(copyDivText);
}
document.addEventListener("DOMContentLoaded", function(){
document.getElementById("copy").onclick = copy;
});
document.addEventListener("DOMContentLoaded", function(){
document.getElementById("copyAjax").onclick = copyAjax;
});
// Copy text as text
function executeCopy(text) {
var input = document.createElement('textarea');
document.body.appendChild(input);
input.value = text;
input.focus();
input.select();
document.execCommand('Copy');
input.remove();
}
Run Code Online (Sandbox Code Playgroud)
我知道你开始编译的43代Chrome使用execCommand和剪贴板.但问题是,您需要在执行用户发起的事件(其中权限被提升)中执行此操作.这是ZeroClipboard基于闪存的解决方案所具有的类似限制.除了得到一个不可能的答案(这是我现在正在思考的问题)之外,这些是我想做的其他选择(警告,它们都是Hail Mary Passes):
我已经看过成问题,#2,如 …
我不是在谈论涉及网络或事件的复杂竞争条件.相反,我似乎发现+=运营商在V8(Chrome 58或Node 8)中不是原子的.
下面的代码旨在并行运行两个所谓的线程.每个"线程"重复调用一个函数,该函数在睡眠很多秒后返回其数字参数.结果总结为累加器.
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// Return the passed number after sleeping that many seconds
async function n(c) {
await sleep(c * 1000);
console.log('End', c);
return c;
}
let acc = 0; // global
// Call n repeatedly and sum up results
async function nForever(c) {
while (1) {
console.log('Calling', c);
acc += await n(c); // += not atomic?!
console.log('Acc', acc); …Run Code Online (Sandbox Code Playgroud)我真的很困惑试图用玩笑的文档的帮助下创建测试https://facebook.github.io/jest/docs/timer-mocks.html#content
我正在尝试检查容器安装时的状态,然后几秒后,我在状态下手动设置值(使用setTimeout()).
我在Main的componentDidMount中有一个函数,如下所示:
componentDidMount() {
this.setStateAfterDelay();
}
Run Code Online (Sandbox Code Playgroud)
该功能的作用是:
setStateAfterDelay = () => {
setTimeout(() => {
this.setState({ fruits: ['banana', 'apple', 'orange', 'vodka', 'kiwi'] });
}, 1500);
}
Run Code Online (Sandbox Code Playgroud)
我完成了第一部分:
const component = mount(<Main />);
expect(component.state().fruits).toEqual(null);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何再次检查状态,让我说2000ms?
任何帮助表示赞赏:)
是的,我知道 - 这个问题有成千上万的答案.请不要告诉我setTimeout方法,因为 - 是的,一切皆有可能,但不如使用sleep()方法那么容易.
例如:
function fibonacci(n) {
console.log("Computing Fibonacci for " + n + "...");
var result = 0;
//wait 1 second before computing for lower n
sleep(1000);
result = (n <= 1) ? 1 : (fibonacci(n - 1) + fibonacci(n - 2));
//wait 1 second before announcing the result
sleep(1000);
console.log("F(" + n + ") = " + result);
return result;
}
Run Code Online (Sandbox Code Playgroud)
如果你知道如何使用相同的结果setTimeout- 告诉我;)fibanacci是非常容易的任务,因为不超过2次递归,但是如何进行n次递归(如fib(1)+ fib(2)+). .+ fib(n))并在每个"+"之后睡觉?不,睡觉会轻松多了.
但我仍然无法实现它的实例.while (curr - …
无论如何都要延迟函数的返回,使用setTimeout().
function foo(){
window.setTimeout(function(){
//do something
}, 500);
//return "some thing but wait till SetTimeout() finished";
}
Run Code Online (Sandbox Code Playgroud) 我做了一个HTML表单,在很多不同的选项卡中有很多问题(来自数据库).然后用户在这些问题中给出答案.每次用户更改选项卡时,我的Javascript都会创建一个保存.问题是每次更改选项卡时我都必须遍历所有问题,并且每次冻结表单大约5秒钟.
我一直在寻找答案如何在后台运行我的保存功能.显然没有真正的方法在后台运行某些东西,很多人建议使用setTimeout();例如这一个如何让一组js函数在后台运行
但是这些例子都没有解释或考虑到即使我使用类似的东西setTimeout(saveFunction, 2000);也无法解决我的问题.在这种情况下,它只将它推迟2秒.
有没有办法解决这个问题?
我在请求中得到了一个字符串数组.每个字符串都包含要在本机shell上执行的命令.
var process = require('child_process');
function execCommand(req,res,callback){
var params = req.params.list //list is an array in the request
var result = '';
var command = '';
for (var i = 0; i < params.length; i++) {
command = params[i];
cmd = process.exec(command);
cmd.stdout.on('data', function(data){
//push the shell output in variable result
});
cmd.on('close', function(code) {
//convert the variable result to a valid JSON
});
}
res.send(result);
};
Run Code Online (Sandbox Code Playgroud)
所有命令的结果在result变量中混淆.如何使for循环中的函数调用同步?
这将base64输出到控制台:
function getBase64(file) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function() {
console.log(reader.result);
};
reader.onerror = function(error) {
console.log('Error: ', error);
};
}
var file = document.querySelector('#files > input[type="file"]').files[0];
getBase64(file); // prints the base64 string
Run Code Online (Sandbox Code Playgroud)
资料来源: https ://stackoverflow.com/a/36281449/1063287
jsFiddle: 上面工作代码的jsFiddle演示
我希望能够将base64分配给变量,所以我根据这个答案尝试了以下内容:
function getBase64(file, onLoadCallback) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = onLoadCallback;
reader.onerror = function(error) {
console.log('Error when converting PDF file to base64: ', error);
};
}
var my_pdf_file = document.querySelector("#my_pdf_file").files[0];
var my_pdf_file_as_base64 …Run Code Online (Sandbox Code Playgroud) 我有一个fork()使用IPC 创建子进程的节点服务器。在某个时候,孩子会以大约10Hz的频率将结果发送回父母,这是一项长期任务的一部分。当传递给您的有效负载process.send()很小时,它们都可以正常工作:我发送的每条消息都会立即收到并由父级处理。
但是,当有效载荷为“大”时(我尚未确定确切的大小限制),而不是立即由父级接收所有有效载荷,而是仅在子级完成其长时间运行的任务后,父级才会接收父级并处理消息。
tl; dr视觉:
良好(发生有效负载较小的情况):
child: send()
parent: receive()
child: send()
parent: receive()
child: send()
parent: receive()
...
Run Code Online (Sandbox Code Playgroud)
错误(发生有效负载的情况):
child: send()
child: send()
child: send()
(repeat many times over many seconds)
...
parent: receive()
parent: receive()
parent: receive()
parent: receive()
...
Run Code Online (Sandbox Code Playgroud)
编辑2:下面的示例代码同时使用时间和迭代计数器来选择何时发送更新。(在我的实际代码中,也可以在n次迭代之后或在循环达到某些结果之后发送更新。)这样,使用setInterval/ setTimeout而不是循环来重写代码对我来说是不得已的选择,因为这需要我删除功能。
编辑:这是重现该问题的测试代码。但是,它只能在OS X上复制,而不能在Windows或Linux上复制:
server.js
child: send()
parent: receive()
child: send()
parent: receive()
child: send()
parent: receive()
...
Run Code Online (Sandbox Code Playgroud)
worker.js
child: send()
child: …Run Code Online (Sandbox Code Playgroud) javascript ×10
node.js ×3
ajax ×1
async-await ×1
asynchronous ×1
base64 ×1
blocking ×1
clipboard ×1
delay ×1
filereader ×1
html5 ×1
ipc ×1
jestjs ×1
modal-dialog ×1
reactjs ×1
settimeout ×1
sleep ×1
unit-testing ×1