まず、node.jsを使用してコントローラを作成しようとします。私はクエリのためのknexと、約束のためのQライブラリを使用しています。Node.js Qライブラリ:チェーンプロミス関数
私はチェーンにDBを照会するが、ここでエラーになってしまい非同期機能をしようとしている:
this.getPosts().then(this.getTags).then(function() ...
私だけthis.getPosts()
のみthis.getTags()
をすれば、それはそれらを正しく取り出します。
read
機能はルートからのものです。
var db = require('../db');
var Q = require("q");
class IndexController {
constructor(page, data) {
this.page = page;
this.data = data;
}
getTags(){
var deferred = new Q.defer();
db('tags').select().then(function(tags){
this.data.tags = tags;
deferred.resolve();
}.bind(this));
return deferred.promise;
}
getPosts(){
var deferred = new Q.defer();
db('posts').select('*', 'posts.id as id', 'tags.name as tag')
.innerJoin('users', 'posts.user_id', 'users.id')
.leftJoin('post_tags', 'posts.id', 'post_tags.post_id')
.leftJoin('tags', 'post_tags.tag_id', 'tags.id')
.then(function(posts){
this.data.posts = posts;
deferred.resolve();
}.bind(this));
return deferred.promise;
}
read(res){ // <-- FROM ROUTE
this.getPosts().then(this.getTags).then(function(){
res.render(this.page, this.data);
}.bind(this));
}
...
}
こんにちは@フロスティ、何のエラーがありますか?そして、私はPromiseコンストラクタを使って約束を作ることができる約束のためにQライブラリを使っているのだろうかと疑問に思っています。 –