在给定场景中实现承诺的最佳方式是什么?
What is the best way to implement promise in the given scenario?
我正在使用 D.js 作为我们 javascript 应用程序的承诺库。
以下是我的示例代码:
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 的编码标准?
我是 promises 的新手,将延迟对象传递给其他函数到 resolve/reject 好吗?
有没有更好的方法来实现以上功能??
提前致谢..
如果您以更自然的方式使用 promise,看来您可以改进代码。
首先,如果 getData
return 是一个 Promise,那么您不必传递 deferred
,这被认为是反模式。你只是简单地 return getInfo()
。
另一件事,在 sample
函数中,如果您的 data
可能已经可用,则可以方便地使用 D.promisify
方法来 return 已解决的具有非承诺值的承诺:
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.
});
我正在使用 D.js 作为我们 javascript 应用程序的承诺库。 以下是我的示例代码:
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 的编码标准? 我是 promises 的新手,将延迟对象传递给其他函数到 resolve/reject 好吗? 有没有更好的方法来实现以上功能??
提前致谢..
如果您以更自然的方式使用 promise,看来您可以改进代码。
首先,如果 getData
return 是一个 Promise,那么您不必传递 deferred
,这被认为是反模式。你只是简单地 return getInfo()
。
另一件事,在 sample
函数中,如果您的 data
可能已经可用,则可以方便地使用 D.promisify
方法来 return 已解决的具有非承诺值的承诺:
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.
});