我已经开发了几年的JavaScript,我根本不理解有关承诺的大惊小怪.
似乎我所做的只是改变:
api(function(result){
api2(function(result2){
api3(function(result3){
// do work
});
});
});
Run Code Online (Sandbox Code Playgroud)
无论如何,我可以使用像async这样的库,例如:
api().then(function(result){
api2().then(function(result2){
api3().then(function(result3){
// do work
});
});
});
Run Code Online (Sandbox Code Playgroud)
哪个代码更多,可读性更低.我没有在这里获得任何东西,它也不会突然神奇地"平坦".更不用说必须将事物转换为承诺.
那么,这里的承诺有什么大惊小怪?
由于JavaScript在单个线程中运行,在发出AJAX请求后,后台实际发生了什么?我想更深入地了解这一点,任何人都可以解释一下吗?
我不确定node.js是如何能够实现异步的哪些功能,哪些不是以及如何创建自定义异步功能.
说我想创建一个自定义异步函数.如果仅仅因为我调用异步函数回调或cb的最后一个参数它会知道它的异步函数,我会感到惊讶:
function f(arg1, callback){
//do stuff with arg1
arg1.doStuff()
//call callback
callback(null, arg1.result());
}
Run Code Online (Sandbox Code Playgroud)
我尝试了类似的东西,它没有异步工作.你怎么告诉node.js f实际上是异步的?
对于下面的 onload 2 函数(计划调用这 2 个图像的“onload”),如何保证其中一个在另一个开始之前完全完成?在这个单线程环境中是否有需要触发的回调的幕后队列?
如果entryFunction永远不会停止循环,它是否会暂停其线程并屈服于doWorks()之一?
我听说javascript不是多线程的,那么entryFunction()是否会屈服/暂停这些异步函数调用?
function entryFunction() {
var obj = new Image();
var obj2 = new Image();
// ...
obj.onload = function() { dowork(); }
obj2.onload = function() { dowork(); }
while (1) {
console.log("Actual work is being done");
}
}
function dowork() {
doThis();
doThat();
}
Run Code Online (Sandbox Code Playgroud) 这是我的Javascript编码.我认为结果是1 2 3 4 5.
async function fn1 () {
console.log(1);
await fn2();
console.log(3);
};
async function fn2 () {
console.log(2);
};
fn1();
new Promise((resolve, reject) => {
console.log(4)
resolve()
}).then(() => {
console.log(5)
})Run Code Online (Sandbox Code Playgroud)
但.结果是:1 2 4 5 3.
Promise.all() 在 Javascript 中是顺序运行还是并行运行?
例如:
const promises = [promise1(), promise2(), promise3()]
Promise.all(promises)
.then(data => {
// whatever
});
Run Code Online (Sandbox Code Playgroud)
是promise1()在转到promise2() 之前执行并解析,还是promise1()、promise2()、 和promise 3()全部同时并行运行?我会假设浏览器中的 Node、Javascript 是单线程的,因此它们不会并行运行?