如何讓鏈式函數在它之前等待函數執行正確?讓鏈式函數等待對方執行
我從模塊此摘錄:
var ParentFunction = function(){
this.userAgent = "SomeAgent";
return this;
}
ParentFunction.prototype.login = function(){
var _this = this;
request.post(
url, {
"headers": {
"User-Agent": _this.userAgent
}
}, function(err, response, body){
return _this;
})
}
ParentFunction.prototype.user = function(username){
this.username = username;
return this;
}
ParentFunction.prototype.exec = function(callback){
request.post(
anotherURL, {
"headers": {
"User-Agent": _this.userAgent
}
}, function(err, response, body){
callback(body);
})
}
module.exports = parentFunction;
這是從我的服務器中:
var pF = require("./myModule.js"),
parentFunction = new pF();
parentFunction.login().user("Mobilpadde").exec(function(data){
res.json(data);
});
的問題是,該user
-function不會等待login
到完成(意思是,它在登錄之前執行返回_this
)。那麼我該如何讓它等待呢?
哦,dangit!我真的希望能夠避免將對方的功能堆疊在一起。無論如何,我只是用缺少的exec函數更新了我的問題(並不是說它以任何方式改變了我的問題,但仍然如此)。 – Mobilpadde 2015-04-03 03:02:05
@Mobilpadde - 查看我添加到我的答案的評論。我開始設計一個隊列的路徑,這個隊列可以嵌入到你的對象中以進行鏈接工作,但是混合同步和異步操作的組合,然後在異步操作完成之後嘗試找出適當的錯誤處理策略,問題變成一個相當大的問題。我建議採用不同的方法。如果所有操作都是同步的,則鏈接很容易。異步操作的混合使事情變得複雜。 – jfriend00 2015-04-03 03:15:51
@Mobilpadde - 我添加了一個承諾風格的實現。 – jfriend00 2015-04-03 03:26:13