一:异步编程:
(1):概念:
同步:即下晚自习,洗澡,上床,看微博,看小说,看博客,睡觉。(是分步执行的).
异步:一边走路,一边把早餐也吃了。
代码:异步.js;
console.log("起床"); console.log("涮牙"); function eatBreakfasst() { console.log("开始吃早餐"); setTimeout(function (){ console.log("走路"); },3000); //3s setTimeout(function(){ console.log("早餐吃完了"); },2000); //2s } eatBreakfasst(); console.log("还是迟到了"); //setTimeout()是一个异步函数,在指定的时间后执行内部的函数. //观察代码可以发现setTimeout是一个异步函数.s
输出:
二:回调函数:
(1):概念:回调函数是指函数可以被传递到另一个函数中,然后被调用的形式。(通过传送函数的地址。)。
function test(x) { return JSON.parse(x); } try { var obj = test(‘foo‘); console.log(obj); } catch(e){ //e指向捕获到的额错误; console.log("转换失败"); }
输出:
E:\Program Files\Sublime Text 3>node 回调函数.js
转换失败
(2):在异步编程中不可以使用try...catch。想想就知道了,异步和同步的执行区别是一个同时执行一个分步依次执行。
错误和发现错误不能同时发生或者在异步中我们不知道到底谁先发生。总之:使用try...catch不能捕获setTimeout()函数中出现的异常。
代码:捕获异步.js
function test(x) { setTimeout(function(){ return JSON.parse(x); },0) } try{ var obj = test(‘foo‘); console.log("执行结果是"+obj); } catch(c) { console.log("转换失败了"); }
输出:
E:\Program Files\Sublime Text 3>node 捕获异步.js
执行结果是undefined
undefined:1
foo
^
SyntaxError: Unexpected token o in JSON at position 1
at JSON.parse (<anonymous>)
at Timeout._onTimeout (E:\Program Files\Sublime Text 3\捕获异步.js:4:13)
at listOnTimeout (internal/timers.js:531:17)
at processTimers (internal/timers.js:475:7)
2:把错误代码写在setTimeout()代码中:
.
function test(x) { setTimeout(function(){ try { return JSON.parse(x); } catch(e) { console.log(‘转换失败‘); } },0); } var obj = test(‘foo‘); console.log("执行结果是:"+obj);
输出:
转换失败
3:回调函数即当使用异步代码去做一件事时,不能预测这件事什么时候做完,其他的事情还在继续,这时可给异步代码准备一个包裹,当异步代码有了执行结果时可以将结果放到这个包裹里,需要在哪里使用这个结果就从包裹取出。
function test(str,callback) { setTimeout(function(){ try { var obj = JSON.parse(str); callback(null,obj); } catch(e) { callback(e,null); } },0); } test(‘foo‘,function(err,result){ if(err) { return console.log(‘转换失败了‘); } console.log(‘数据转换成功,没有问题可以直接使用了:‘+result); });
输出:
E:\Program Files\Sublime Text 3>node 回调函数1.js
转换失败了
原文:https://www.cnblogs.com/1314bjwg/p/12445847.html