我一直在尝试在我的node.js服务器上编写更好的代码,并在阅读了以下一些博客文章之后:
我仍然不确定我是否以“正确的方式”将我的数据沿着承诺链返回。
我无法确定什么时候返回或传递数据这样的承诺
案例1
var promise = function () {
var defer = q.defer();
var myData = "hi"
defer.resolve(myData);
return d.promise;
};
或者像这样。
案例2
var promise = function () {
var myData = "hi"
return myData;
};
我假设如果我知道某些东西将被退回,而承诺链不可能破坏,那么使用案例2 ,但如果他们是一个变化它可能会失败(即它从网络呼叫返回数据但用户离线)然后使用案例1 ,以便它可以处理这两种情况。这是正确的还是我对这个流程/过程的工作方式有误解。
答案 0 :(得分:1)
在这两种情况下,当您在第一种情况下将其包装在一个承诺中时,您将返回一个立即知道或计算的结果。是否要执行此操作取决于如果结果是异步计算的,则对函数的调用者是否应该是透明的。如果您返回一个promise,您可以稍后更改函数的实现,以异步计算或检索结果。
两个提示:
promise
。return q("hi");
将文字包装在一个承诺中。答案 1 :(得分:0)
var promise1 = function() {
//async get file name
}
var promise2 = function(filename) {
var defer = q.defer();
var myData = "hi"
//async
fs.readFile(filename, 'utf-8', function(err, data) {
if (err) {
defer.reject(err);
} else {
defer.resolve(myData);
}
}
}
return d.promise;
};
var promise3 = function(data) {
//use data do something
}
var onError(err) {
console.log(err);
}
var onDone(result) {
console.log(result)
}
//your logic might look like
promise1.then(promise2).then(promise3).catch(onError).done(onDone);