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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用Layman的術語理解異步代碼

用Layman的術語理解異步代碼

慕妹3242003 2019-10-11 10:32:22
我了解有關異步性的基本知識:事物不會順序執(zhí)行。據(jù)我了解,這有很強大的功能。但是對于我的一生,我無法全神貫注于代碼。讓我們看一下我已經(jīng)寫過的異步Node.JS代碼...但是并沒有真正得到。function newuser(response, postData) {    console.log("Request handler 'newuser' was called.");    var body = '<html>' +         '<head>' +        '<meta http-equiv="Content-Type" content="text/html; ' +        'charset=UTF-8" />' +        '</head>' +        '<body>' +        '<form action=" /thanks" method="post">' +        '<h1> First Name </h1>' +        '<textarea name="text" rows="1" cols="20"></textarea>' +        '<h1> Last Name </h1>' +        '<textarea name="text" rows="1" cols="20"></textarea>' +        '<h1> Email </h1>' +        '<textarea name="text" rows="1" cols="20"></textarea>' +        '<input type="submit" value="Submit text" />' +        '</body>' +        '</html>';    response.writeHead(200, { "Content-Type": "text/html" });    response.write(body);    response.end();}響應又從何而來?發(fā)布數(shù)據(jù)?為什么不能在此“回調(diào)”中定義變量,然后在回調(diào)之外使用它?有沒有一種方法可以讓一些東西具有順序性,然后使程序的其余部分異步?
查看完整描述

3 回答

?
翻翻過去那場雪

TA貢獻2065條經(jīng)驗 獲得超14個贊

我不確定在哪里使用該函數(shù),但是回調(diào)的要點是您將它們傳遞給異步運行的某個函數(shù)。它存儲了您的回調(diào),當該函數(shù)完成需要執(zhí)行的操作后,它將使用必要的參數(shù)調(diào)用回調(diào)。從前到后的示例可能是最好的。


想象我們有一個框架,其中有一個運行了很長時間的操作,該操作從數(shù)據(jù)庫中獲取一些數(shù)據(jù)。


function getStuffFromDatabase() {

  // this takes a long time

};

由于我們不希望它同步運行,因此我們將允許用戶傳遞回調(diào)。


function getStuffFromDatabase(callback) {

  // this takes a long time

};

我們將模擬長時間調(diào)用setTimeout;我們還將假裝我們從數(shù)據(jù)庫中獲得了一些數(shù)據(jù),但是我們只是硬編碼一個字符串值。


function getStuffFromDatabase(callback) {

  setTimeout(function() {

    var results = "database data";

  }, 5000);

};

最后,一旦有了數(shù)據(jù),我們將調(diào)用框架函數(shù)用戶給我們的回調(diào)。


function getStuffFromDatabase(callback) {

  setTimeout(function() {

    var results = "database data";

    callback(results);

  }, 5000);

};

作為框架的用戶,您可以執(zhí)行以下操作來使用該函數(shù):


getStuffFromDatabase(function(data) {

  console.log("The database data is " + data);

});

所以,你可以看到data(同response和postData在你的例子),從你通過回調(diào)函數(shù)來成 ; 當它知道數(shù)據(jù)應該是什么時,它將把數(shù)據(jù)提供給您。


您無法在回調(diào)中設置值并不能在回調(diào)之外使用它的原因是,回調(diào)本身直到稍后才發(fā)生。


//  executed immediately  executed sometime in the future

//      |                  |       by getStuffFromDatabase

//      v                  v

getStuffFromDatabase(function(data) {

  var results = data; // <- this isn't available until sometime in the future!

});


console.log(results); // <- executed immediately

當console.log運行時,的分配var results還沒有發(fā)生!


查看完整回答
反對 回復 2019-10-11
  • 3 回答
  • 0 關注
  • 647 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號