我正在使用D.js作为我们的javascript应用程序的promise库。 以下是我的示例代码:
function getData(deferred) {
var data_one;
// getInfo is returning a promise for async task
getInfo()
.then(function (resp_one) {
data_one = resp_one;
// getInfo2 is also returning another promise
return getInfo2();
})
.then(function (resp_two) {
deferred.resolve('prefix' + data_one + resp_two);
});
};
function sample () {
var d = D(),
data = localStorage.getItem('key');
if (data) {
d.resolve(data);
} else {
getData(d);
}
return d.promise;
}
sample().then(function (data) {
//do something with data.
});
我正在调用示例函数。样本函数和子函数中的实现遵循promise的编码标准吗? 我是承诺的新手,将延迟对象传递给其他函数解析/拒绝是否合适? 有没有更好的方法来实现上述功能?
提前致谢..
答案 0 :(得分:2)
如果您以更自然的方式使用promises,您似乎可以改进代码。
首先,如果getData
返回Promise,那么您不必传递deferred
,这被视为反模式。您只需返回getInfo()
即可。
另一件事,在sample
函数中,如果您的data
可能已经可用,则使用D.promisify
方法返回已解决的具有非承诺值的承诺很方便:
function getData() {
var data_one;
return getInfo().then(function (resp_one) {
data_one = resp_one;
return getInfo2();
})
.then(function (resp_two) {
return 'prefix' + data_one + resp_two;
});
};
function sample() {
var data = localStorage.getItem('key');
return data ? D.promisify(data) : getData();
}
sample().then(function (data) {
//do something with data.
});