San*_*apa 1 javascript promise es6-promise
我正在学习 JS Promise。我对如何在运行 cb 函数(需要 5 秒)后重新处理 f2 返回的承诺感到有点困惑。
var cb = function(){
console.log('5 sec');
}
var f2 = function(){
return new Promise((resolve,reject)=>{
setTimeout(cb, 5000);
console.log('Last line of f2')
resolve('5RESOLVED')
});
}
f2().then(res=>{
console.log(res)
})
Run Code Online (Sandbox Code Playgroud)
当前输出按以下顺序排列
我希望输出为 - Last line of f2 - 5 sec -5Resolved
您需要将resolve(\xe2\x80\xa6)调用放在 asynchronous 内部cb,以便它仅在 5 秒后发生。目前,您正在立即调用它(在安排回调之后)。使用
function f2() {\n return new Promise((resolve,reject) => {\n setTimeout(function() {\n console.log(\'5 sec\');\n resolve(\'5RESOLVED\')\n }, 5000);\n console.log(\'Last line of f2\');\n });\n}\nRun Code Online (Sandbox Code Playgroud)\n\n更好的是,我建议不要自己编写任何异步回调(这很容易出错),而只处理基于 Promise 的辅助函数:
\n\nfunction delay(t) {\n return new Promise(resolve => {\n setTimeout(resolve, t);\n });\n}\nasync function f2() {\n console.log("last line of f2");\n await delay(5000);\n console.log("5 sec");\n return "5RESOLVED";\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1906 次 |
| 最近记录: |