在 Node.js 中,使用 NodeGit。我在POST Express.js 路由中使用了与此类似的函数。这条路线应该得到endCommit和startCommit之间的提交:
router.post('/getLog', function(req, res, next) {
var logData = [];
Git.Repository.open(path.join(repositories.mine.path))
.then(function(repo) {
return {
endCommit: [ First commit object ], //Just a random commit object that has a "sha" inside
startCommit: [ Second commit object ] //Just a random commit object that has a "sha" inside
};
})
.then(function(range) {
// History returns an event.
var history = range.endCommit.history(Git.Revwalk.SORT.Time);
// History emits "commit" event for each commit in the branch's history
history.on("commit", function(commit) {
logData.push({
commit: commit.sha(),
message: commit.message()
});
if (commit.sha() == range.startCommit.sha()) {
console.log("---LOG CREATED---");
history.end();
}
})
history.start();
})
.done(function() {
console.log("---RETURNING---");
return res.json({ logData: logData });
});
});
但是,由于history.on("commit", ...)
不是 Promise,因此.done()
首先调用该函数。在日志中我看到:
---RETURNING---
---LOG CREATED---
只有在创建日志后才能返回?
我过去曾遇到过这样的问题,但是在这种特殊情况下,我不知道如何承诺历史对象,因为它是基于事件的。