承诺的两种实现之间的差异
Difference between 2 implementations of 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;
}
谢谢。
在promise链中传递函数时,您应该传递不带参数或()
的函数名,或者像第二种情况一样,传递匿名函数。这是因为Q
将使用先前承诺解析的结果/返回值为您调用它。
因此,.then(ctxTransport.getTransportById(idTran, transport))
在语义上是不正确的,因为您传递的不是函数,而是ctxTransport.getTransportById
的返回值。
相关文章:
- HTML中两种JS实现之间的差异
- 如何在three.js中实现不同相机/场景之间的交叉渐变
- 如何在Ionic Framework中实现选项卡页面之间的转换
- 无法在 JS 树和 JQ 网格行之间实现拖放
- 如何在AngularJS中实现控制器之间的通信
- Javascript 实现差异(以 2 个日期之间的天数为单位)
- 这两种实现之间有什么区别
- 尝试实现 ng-repeate 和表单之间的双向绑定
- 如何使用箭头键实现之间的导航
- 如何在javascript中实现对象之间的引用
- 如何设置AngularJS项目以在使用不同的服务实现之间进行交替
- 注意到JSON.stringify的不同实现之间有一个奇怪的差异
- 有没有一种方法可以使用lightbox2实现图像之间更平滑的过渡?
- 承诺的两种实现之间的差异
- 如何实现两个表之间的拖放,与所有的内容
- 在页面跳转之间实现sessionStorage
- 如何实现一个AngularJS滑块,其中3个滑块在一个可分发值之间共享
- 如何在 JavaScript 中实现异步函数之间的依赖关系
- 实现HighCharts和服务器之间的通信R
- 如何在JavaScript和Scala之间实现实时通信