承诺在以不同方式执行时显示不同的结果
Promises when executed differently displaying different results
在最近深入节点后,我只是为了进行实验,编写了一个简单的promise代码,然后从命令行执行它。我看到了两种输出。这是我的代码:
function doWork(){
return new Promise(function(resolve,reject){
setTimeout(function(){
console.log('done!');
resolve();
}, 1000);
});
}
然后:
1. doWork().then(function(){
return doWork();
}).then(function(){
console.log('that''s it');
});
Output :
done!
done!
that's it!
另一种方式:
2. doWork().then(function(){
doWork();
}).then(function(){
console.log('that''s it');
});
Output:
done!
that's it!
done!
为什么当我不使用return
或使用return
时输出会发生变化?
通过返回值承诺工作。如果没有return
,则链不知道在继续到链中的下一个处理程序之前要等待第二个doWork
。
基本上,您不从成功处理程序返回承诺链,从而破坏了承诺链。
doWork().then(function () {
// this will be executed only after first call to doWork is resolved.
// When this executes it returns the promise returned by doWork thereby asking next then handler to wait till this promise is resolved.
return doWork();
}).then(function () {
// since we are returning doWork second call promise, this will be executed only after it is resolved.
// if we don't return doWork second call promise, it won't wait for promise to be resolved and directly execute.
console.log('that''s it');
});
相关文章:
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- JavaScript循环无法正确计算/显示结果
- 将循环中的两个文本框相乘,并在第三个文本框上显示结果
- BMI计算器以Javascript显示结果
- 在表中显示结果
- onchange选择get value并执行查询,然后在同一页面上显示结果
- 搜索XML文件并使用javascript显示结果
- Moment.js不显示结果
- 使用jQuery延迟表单输入,并在延迟后在同一页面上显示结果
- 防止 PHP 在新页面中显示结果
- jquery jqgrid 不显示结果,具体取决于 JSON 对象中的参数
- Angular-如何显示结果,仅在未选中时显示
- backbone.js视图没有't由于异步获取而显示结果;t渲染
- jqueryajax帖子将我发送到操作页面,并且不会显示结果数据
- 添加两个数字,并使用Javascript在文本框中显示结果
- 接受用户输入,与JSON数据匹配,并以javascript显示结果
- 自动完成 JQuery 不显示结果
- 控制台.log或显示结果的函数
- 提交表单,使用脚本处理信息,并在同一页面上显示结果
- AJAX 实时搜索仅当结果以相同的第一个字母开头时才显示结果