2017-08-05 1 views
-1

Ich bin ein PHP-Entwickler und derzeit arbeite ich an einem node.js-Projekt, ich habe noch nie async erlebt, so dass es mich verwirrte.Wie man guten Async macht?

Muss ich das wirklich so machen?

// 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}); 
     }); 
    }); 
}); 

Gibt es eine Möglichkeit, es weniger verwirrend zu machen?

Antwort

0

Große Frage, ja, es gibt eine vereinfachte Art und Weise. Was Sie hier tun, ist Rückruf nach Rückruf, die den Code-Look ‚verwirrend‘

Gemeinhin als Rückruf Hölle macht

Es ist für Standards ziemlich jetzt aussieht, aber mit der Zeit wird es wachsen in einem hungrigen Programmiere Krafttier, das deine ganze Aufmerksamkeit braucht.

Für ein Javascript-Pro ist es nicht wirklich schwer, damit umzugehen, aber wenn Sie einen entspannteren Stil bei sich nähernden Rückrufen haben möchten; Sie können verspricht verwenden. Versprechen sind ein Weg in die Zukunft für JS, aber ich denke, es ist gut zu verstehen, BEIDE

ein Rückruf meist zwei Parameter hat es wie folgt aussieht:

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

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

mit dem Versprechen, das viel einfacher wird in den semantischen Begriffe

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

Dies ist natürlich zu verstehen, funktioniert nur, wenn Ihre Funktionen Versprechen kompatibel sind, wenn Sie mehr über Versprechen lesen Sie in diesem Tutorial github lernen wollen: https://github.com/then/promise

Sie können sogar Versprechungen verketten und eine wirklich saubere Codebasis erstellen!