第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何為Node.js編寫異步函數(shù)

如何為Node.js編寫異步函數(shù)

我試圖研究應(yīng)該如何編寫完全異步的函數(shù)。經(jīng)過大量文檔的大量工作后,我仍然不清楚。如何為Node編寫異步函數(shù)?我該如何正確實(shí)現(xiàn)錯(cuò)誤事件處理?問我問題的另一種方法是:我應(yīng)該如何解釋以下功能?var async_function = function(val, callback){    process.nextTick(function(){        callback(val);    });};另外,我在SO上發(fā)現(xiàn)了這個(gè)問題(“如何在node.js中創(chuàng)建非阻塞異步函數(shù)?”)。我覺得它還沒有得到回答。
查看完整描述

3 回答

?
蝴蝶不菲

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

您似乎將異步IO與異步函數(shù)混淆。node.js使用異步非阻塞IO,因?yàn)榉亲枞鸌O更好。理解它的最好方法是觀看ryan dahl的一些視頻。


如何為Node編寫異步函數(shù)?


只寫正常函數(shù),唯一的區(qū)別是它們不是立即執(zhí)行而是作為回調(diào)傳遞。


我該如何正確實(shí)現(xiàn)錯(cuò)誤事件處理


通常API會(huì)給你一個(gè)帶有錯(cuò)誤作為第一個(gè)參數(shù)的回調(diào)。例如


database.query('something', function(err, result) {

  if (err) handle(err);

  doSomething(result);

});

是一種常見的模式。


另一個(gè)常見的模式是on('error')。例如


process.on('uncaughtException', function (err) {

  console.log('Caught exception: ' + err);

});

編輯:


var async_function = function(val, callback){

    process.nextTick(function(){

        callback(val);

    });

};

調(diào)用上面的函數(shù)


async_function(42, function(val) {

  console.log(val)

});

console.log(43);

將42異步打印到控制臺(tái)。特別是process.nextTick在當(dāng)前eventloop callstack為空后觸發(fā)。這調(diào)用堆棧是空后async_function和console.log(43)已經(jīng)運(yùn)行。所以我們打印43,然后是42。


您應(yīng)該對(duì)事件循環(huán)進(jìn)行一些閱讀。


查看完整回答
反對(duì) 回復(fù) 2019-09-19
?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊

僅通過回調(diào)是不夠的。例如,您必須使用settimer來使函數(shù)異步。


示例:不是異步函數(shù):


function a() {

  var a = 0;    

  for(i=0; i<10000000; i++) {

    a++;

  };

  b();

};


function b() {

  var a = 0;    

  for(i=0; i<10000000; i++) {

    a++;

  };    

  c();

};


function c() {

  for(i=0; i<10000000; i++) {

  };

  console.log("async finished!");

};


a();

console.log("This should be good");

如果你將運(yùn)行上面的例子,這應(yīng)該是好的,將不得不等待,直到這些功能將完成工作。


偽多線程(異步)函數(shù):


function a() {

  setTimeout ( function() {

    var a = 0;  

    for(i=0; i<10000000; i++) {

      a++;

    };

    b();

  }, 0);

};


function b() {

  setTimeout ( function() {

    var a = 0;  

    for(i=0; i<10000000; i++) {

      a++;

    };  

    c();

  }, 0);

};


function c() {

  setTimeout ( function() {

    for(i=0; i<10000000; i++) {

    };

    console.log("async finished!");

  }, 0);

};


a();

console.log("This should be good");

這個(gè)將是異常的異步。這應(yīng)該是好的將在異步完成之前寫入。


查看完整回答
反對(duì) 回復(fù) 2019-09-19
?
蠱毒傳說

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊

試試這個(gè),它適用于節(jié)點(diǎn)和瀏覽器。


isNode = (typeof exports !== 'undefined') &&

(typeof module !== 'undefined') &&

(typeof module.exports !== 'undefined') &&

(typeof navigator === 'undefined' || typeof navigator.appName === 'undefined') ? true : false,

asyncIt = (isNode ? function (func) {

  process.nextTick(function () {

    func();

  });

} : function (func) {

  setTimeout(func, 5);

});


查看完整回答
反對(duì) 回復(fù) 2019-09-19
  • 3 回答
  • 0 關(guān)注
  • 786 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)