【发布时间】:2020-07-20 23:06:48
【问题描述】:
我是 javascript 的大一新生,现在正在学习 Promise 部分。
下面我一直在尝试使用 setTimeout 编写一个承诺链,并期望它在 2 秒后打印“第一个结果”,并在另外 2 秒后打印“第二个结果”。但是,它会同时打印“第一个结果”和“第二个结果”。
谁能告诉我哪里出错了?
var doSomething = new Promise(function(resolve,reject){
setTimeout(function(){
resolve('first result');
},2000);
});
var doSomethingElse = new Promise(function(resolve,reject){
setTimeout(function(){
resolve('second result');
},2000);
});
doSomething
.then(function(result){
console.log("This is the "+result);
return doSomethingElse;
})
.then(function(result){
console.log("This is the "+result);
});
=============================
编辑: 所以当我如下写promise时,executor函数(setTimeout)立即开始计数,并在2秒后解决。
var doSomething = new Promise(function(resolve,reject){ // starts counting here
setTimeout(function(){
resolve('first result');
},2000);
});
但是,如果我将 promise 包装在如下函数中,则执行器函数 (setTimeout) 仅在 我调用该函数后开始计数。这是正确的吗?
function doSomething(){
return new Promise(function(resolve,reject){
setTimeout(function(){
resolve('first result');
},2000);
})
}
doSomething(); // starts counting here
【问题讨论】:
-
你同时开始了两个承诺。您只是将它们链接起来,以便以定义的顺序打印它们的响应。如果你想在第一个 resolve 后开始第二个 promise,你需要把
new Promise放到第一个的.then()中。 -
编辑中的问题:是的,是的。
标签: javascript promise settimeout