使用REST,我们可以使用Swagger,RAML或其他技术来记录我们的API并生成HTML文档,我们的消费者可以在不需要与服务器交互的情况下阅读这些文档.
为GraphQL做一些类似的事情吗?有没有办法生成资源和属性的文档?
我试图重构以下代码,以避免回调地狱,将其转换为:
createUser(user_data)
.then(createClient(client_data))
.then(createClientPartner(clientpartner_data))
.then(function(data) {
cb(null, _.pick(data,['id','username']));
}, function(error) {
cb(error);
});
Run Code Online (Sandbox Code Playgroud)
如您所见,我为每个步骤创建了一个方法:
function createUser(user_data) {
console.log('createUser');
var deferred = Q.defer()
new db.models.User.create(user_data, function(err, user) {
console.log('createUser done');
if (!!err)
deferred.reject(err);
else {
client_data['id'] = user.id;
deferred.resolve(user);
}
});
return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)
其他方法具有相同的console.log调用,以便能够遵循执行路径.
我希望它是:
但相反,它是:
为什么在前一个承诺尚未解决时触发了功能?我希望"然后"等到先前的承诺得到解决或拒绝继续.我错过了一些重要的承诺吗?