我在 Promise 中感到很困惑。它是同步还是异步的?
return new Promise (function(resolved,reject){
//sync or async?
});
我在 Promise 中感到很困惑。它是同步还是异步的?
return new Promise (function(resolved,reject){
//sync or async?
});
传递给 Promise 构造函数的函数会同步执行,但依赖其解决的任何内容都会异步调用。即使Promise立即解决,任何处理程序也会异步执行(类似于使用 setTimeout(fn, 0))-主线程首先运行到结束。
无论您在哪个JavaScript环境中 - 无论您是在Node还是浏览器中,这都是正确的。
console.log('start');
const myProm = new Promise(function(resolve, reject) {
console.log('running');
resolve();
});
myProm.then(() => console.log('resolved'));
console.log('end of main block');
tetherFunction
中调用一个异步的、基于回调的函数,当该回调运行时,调用 resolve
。 - CertainPerformancenew Promise(function(resolve, reject) {
console.log('foo');
})
console.log('bar');
承诺内部的代码(同步代码)必须完成后,承诺外部的代码才能开始执行。
话虽如此,承诺是处理异步代码的常见方法。承诺最常见的用例是表示以异步方式生成或获取的某些值。依赖于该值的逻辑可以通过使用 .then()
或相关的 Promise 方法来异步等待该值可用的回调函数。
console.log("0");
new Promise((resolve, reject) => {
console.log("1");
resolve();
}).then(() => {
console.log("2");
});
console.log("3");
then
以异步方式运行。我认为其他答案不准确。
new Promise (executor_function)
在这里,executor_function将作为Promise初始化的一部分立即运行 --- 这意味着Promise init将同步执行,但并不意味着executor_function内部的代码必须同步运行,相反,executor_function内部的代码也可以异步运行,例如:
new Promise ((resolve, reject) => {
setTimeout(resolve, 1000); // wait 1s
})
const promise= new Promise(function(resolve, reject) {
//doing some logic it gonna be executed synchronously
console.log("result");
})
console.log("global log")
const promise = new Promise(function(resolve, reject) {
//doing some logic it gonna be executed synchronously
resolve("fullfiled")
})
promise.then(v => {
console.log(v)
})
console.log("global log")
resolve 和 reject
作为参数传递。class Promise {
constructor(method) {
method(resolve, reject)
}
resolve() { ... }
reject() { ... }
then() { ... }
}
new Promise()
时,你只是创建一个新的对象。你的 Promise 构造函数
将运行,并立即调用该方法。因此,你的 promise 中的代码会同步执行。return new Promise (function(resolved,reject){
//sync or async?
});
then
链接promise,那么只有在第一个promise调用resolve()
后才会调用它。return new Promise (function(resolve,reject){
const a = 5*5; // sync operation.
db.save(a, function callback() { // async operation.
resolve() // tells promise to execute `then` block.
});
});
const promise = new Promise(function(resolve, reject) {
//doing some logic it gonna be executed synchronously
console.log("check")
resolve("fullfiled")
})
promise.then(v => {
console.log(v)
})
console.log("global log")