Discuss
/
JavaScript
/
then串联里setTimeout不同方式导致的不同结果???
then串联里setTimeout不同方式导致的不同结果???
Topic sourcesetTimeout 的第一个参数是回调函数的入口(地址),也就是resolve,不是可执行语句resolve(input*input),resolve一旦执行,会直接将内容传递给Promise对象的PromiseResult,写成可执行语句,setTimeout可能会获得一个未定义或未知的函数入口,具体可以调试看看。
- 1
ya_ma_dei
function log(txt)
{
console.log(txt);
}
function multiply(input) {
return new Promise(function (resolve, reject) {
log('calculating ' + input + ' x ' + input + '...');
// setTimeout(resolve, 500, input*input);
setTimeout(resolve(input*input), 500);
});
}
function add(input) {
return new Promise(function (resolve, reject) {
log('calculating ' + input + ' + ' + input + '...');
// setTimeout(resolve, 500, input+input);
setTimeout(resolve(input+input), 500);
});
}
var p = new Promise(function (resolve, reject) {
log('start new Promise...');
resolve(123);
});
p.then(multiply)
.then(add)
.then(multiply)
.then(add)
.then(function (result) {
log('Got value: ' + result);
});
结果直接就全部打印出来了,没有延时。
查了setTimeout的用法,第三个参数就是传给第一个参数(函数)的参数,应该和resolve(input*input)一样啊,那为什么写成resolve(input*input)就没有延时效果了呢?