最近,我已经看到Promise的概念在AngularJS和JQuery中实现.
我已经在下面的代码中看到了Java中的Futures的实现,但是这需要在语言/平台中存在线程池的概念.但是,Javascript中没有这样的线程概念.如何实现Javascript中的Promise?
public class Futures1 {
private static final ExecutorService pool = Executors
.newFixedThreadPool(10);
public static void main(String[] args) {
Future<String> contentsFuture = null;
try {
contentsFuture = startDownloading(new URL("http://www.example.com"));
} catch (MalformedURLException e) {
e.printStackTrace();
}
// other computation
try {
final String contents = contentsFuture.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
public static Future<String> startDownloading(final URL url) {
return pool.submit(new Callable<String>() {
@Override
public String call() throws Exception {
try (InputStream input = url.openStream()) …Run Code Online (Sandbox Code Playgroud) 我想知道以下javascript环境如何作为系统互连.
我们可以将此限制为浏览器环境,因为节点已在另一篇文章中介绍(此处)
Javascript是单线程的,因此只有一个callstack.
Javascript环境只提供一些真正异步的函数.这些可能包括setTimeout(),setInterval()和I/O函数.
console.log(‘Sync code started…’);
setTimeout(function asyncLog() {
console.log(‘Async function has completed’)
}, 2000);
console.log(‘Sync code finished…')
Run Code Online (Sandbox Code Playgroud)
(如果我错了,请纠正步骤)
如果有人可以概述async函数(例如setTimeout)从第一次访问callstack到回调到callstack的时间和位置的步骤的概述,则不需要逐个回答这些步骤.
javascript asynchronous event-loop event-queue single-threaded
我真的在努力学习编写异步JavaScript.能否请您提供一个简单的JavaScript函数示例,它是用纯JavaScript编写的异步(而不是使用Node.js或JQuery)
真的很想了解javascript的事件队列。我目前的理解如下。
let doSomething = (callback) => {
callback("first");
};
let foo = (text) => {
console.log(text);
};
doSomething(foo);
setTimeout(() => {
console.log("hey");
});
console.log("after");Run Code Online (Sandbox Code Playgroud)
doSomething 的回调不是异步操作,因此不会放入回调队列中。然而,setTimeout 是一个异步操作,因此将 this 放入回调队列中。因为回调队列是在 JavaScript 线程结束后调用的,所以该setTimeout()函数是最后调用的。
setTimeout()?我的目标是了解某些 JavaScript 函数到底是什么使它们成为异步的。你可以有这样的函数:
function someRandomFunction () {
for (let i of everything) {
iterator++
something = true
hello = that + whatever
}
}
Run Code Online (Sandbox Code Playgroud)
这个函数没有什么是异步的。它可以做很多事情,但是做起来非常快。
然后采用如下 Node.js 函数:
fs.readFile('path/to/file', (err, data) => {
// do something
})
Run Code Online (Sandbox Code Playgroud)
该函数被声明为异步的。但为什么会这样呢?其背后的原因是什么?
是否因为读取文件需要一定的时间才能完成,因此它是异步的?为什么循环某些变量并进行某些计算不是异步时是异步的?
javascript ×5
asynchronous ×4
callback ×1
event-loop ×1
event-queue ×1
jquery ×1
node.js ×1
promise ×1