2017-08-05 60 views
-1

我是一名PHP開發人員,目前我正在開發一個node.js項目,之前我從未體驗過異步,所以它讓我困惑。如何做好異步?

我真的必須這樣做嗎?

// user model 
exports.getRandomUser = function(cb){ 
    db.query('...query...', cb); 
} 
// post model 
exports.getRandomPost = function(uid, cb){ 
    db.query('...query...', cb); 
} 
// router 
router.get('/', function(req, res) { 
    user.getRandomUser(function(userInfo){ 
     post.getRandomPost(userInfo.id, function(postInfo){ 
      res.render('post', {data: postInfo}); 
     }); 
    }); 
}); 

有什麼辦法可以讓它更容易混淆?

回答

0

偉大的問題,是的有一個更簡化的方式。你在做什麼這裏是回調後的回調,這使得代碼看起來「混亂」

通常所說回調地獄

它看起來很漂亮,現在的標準,但在時間它會成長爲一個飢餓編程權力的野獸,一直需要你的關注。

對於JavaScript專業版來說,處理它並不是很難,但是如果你想在接近回調時擁有更輕鬆的風格,您可以使用承諾。承諾是邁向未來的JS,但我認爲這是很好的瞭解BOTH

回調主要有兩個參數,它看起來像這樣:

dothis(function (error, data) { 
    if (error) { 
      throw new Error(error) 
    } 

    console.log('we have data', data) 
}) 

有了承諾,這變得更加容易在語義方面

dothis.then(function(data) { 
    console.log('we have data', data) 
}).catch(function(error) { 
    throw new Error(error) 
}) 

這當然只是如果你的功能兼容的承諾,如果你想了解更多有關承諾,請查看本教程的github努力瞭解:https://github.com/then/promise

你甚至可以鏈接承諾,並創建一個非常乾淨的代碼庫!