我在我的网站上使用promises(仍在学习),我想知道这是否有区别:
return promise
.then(ctxTransport.getTransportById(idTran, transport))
.then(checkLocking)
.fail(somethingWrong);
和此:
return promise
.then(function () { return ctxTransport.getTransportById(idTran, transport); })
.then(function () { return checkLocking(); })
.fail(somethingWrong);
第一次实施时有时会出错。
var getTransportById = function (transportId, transportObservable, forceRemote) {
// Input: transportId: the id of the transport to retrieve
// Input: forceRemote: boolean to force the fetch from server
// Output: transportObservable: an observable filled with the transport
...
return manager.executeQuery(query)
.then(querySucceeded)
.fail(queryFailed);
function querySucceeded(data) {
transportObservable(data.results[0]);
}
};
function checkLocking() {
var now = new Date();
transport().lockedById(5);
transport().lockedTime(now);
return ctxTransport.saveChanges(SILENTSAVE);
}
function somethingWrong(error) {
var msg = 'Error retreiving data. ' + error.message;
logError(msg, error);
throw error;
}
感谢。
答案 0 :(得分:0)
在promise链中传递函数时,你应该传递没有参数的函数名或()
,或者在第二种情况下传递匿名函数。这是因为Q
将使用先前承诺解析的结果/返回值为您调用它。
因此,.then(ctxTransport.getTransportById(idTran, transport))
在语义上是不正确的,因为您没有传递函数,而是ctxTransport.getTransportById
的返回值。