【发布时间】:2018-03-21 00:47:34
【问题描述】:
用 Promises 做实验,发现了一些我没想到的东西。
function Delayer(time){
return new Promise((resolve,reject)=>{
if(time != 0){
setTimeout(()=>resolve("Waited " + (time/1000) + " secs!"),time)
}
else{
resolve("No Time Waited");
}
})
}
var output = "Promise not resolved yet!";
console.log(output);
Delayer(10).then(function(msg){output = msg; console.log(output)});
console.log(output);//this wont change until callback.
Delayer(0).then(function(msg){output = msg; console.log(output)});
console.log(output);
我希望这个 Promise 像这样解决:
> Promise not resolved yet!
> Promise not resolved yet!
> No Time Waited
> No Time Waited
> Waited 3 secs!
相反,我得到 3 个“尚未解决”,只有一个“没有时间等待”。在处理立即解析之前,它显然要等到其余代码完成。它是如何做到的?
在创建可立即解决的 Promise 时,设计最佳实践是什么?
【问题讨论】:
-
如果您接受异步,请真正接受它。不要试图区分你认为异步的函数可能是立即的。处理它们的方式与处理在未知时间内解决的问题相同。
-
我创建这个例子只是为了突出这个特性。我不希望这会导致我的代码出现问题,只是想知道它是如何工作的。我实际上预计这会导致问题,但这证明我错了。
标签: javascript promise