exports.index = function(req, res) {
moviedb.indexMovie()
.then(x => {
Movie.findAsync()
.then(responseWithResult(res))
.catch(handleError(res))
}
)
};
function responseWithResult(res, statusCode) {
statusCode = statusCode || 200;
console.log("Populating Response");
return function(entity) {
if (entity) {
res.status(statusCode).json(entity);
}
};
}
上面的代码完全正常,在responsewithresult函数中返回的函数会被.then响应填充。但是,我正在尝试并尝试这个,但它没有用。请解释原因?
exports.index = function(req, res) {
moviedb.indexMovie()
.then(x => {
Movie.findAsync()
.then(x => {responseWithResult(res)}) // <-- this doesn't work
.catch(handleError(res))
})
};
答案 0 :(得分:3)
由于您未定义返回,请在return
调用之前添加responseWithRest
或删除{}
周围的# Fibonacci sequence Memoization
fib_cache = {0:0, 1:1}
def fibonacci(n):
if n < 0:
return -1
if fib_cache.has_key(n):
print "Fibonacci sequence for %d = %d cached" % (n, fib_cache[n])
return fib_cache[n]
else:
fib_cache[n] = fibonacci(n - 1) + fibonacci(n - 2)
return fib_cache[n]
if __name__ == "__main__":
print fibonacci(6)
print fib_cache
# fibonacci(7) reuses fibonacci(6) and fibonacci(5)
print fibonacci(7)
print fib_cache
以使其成为表达式箭头函数。
承诺按返回值工作。
您的第一个示例也没有对操作进行排序。函数立即被调用。
答案 1 :(得分:3)
自
以来无效.then(responseWithResult(res))
将responseWithResult
(这是一个最终返回值的函数)的结果传递给then
函数,而
x => {responseWithResult(res)}
在逻辑上与
相似function(x) {
responseWithResult(res);
}
当你把它放在then(...)
里面时,什么也没有。
你可以用
解决这个问题then(x => responseWithResult(res))
就像
function(x) {
return responseWithResult(res);
}
但实际上你应该折射你的整个功能以更好地利用承诺,最后有一个更清晰的代码:
exports.index = function(req, res) {
moviedb.indexMovie()
.then(() => Movie.findAsync())
.then(movie => responseWithResult(movie, res))
.catch(() => handleError(res))
};
function responseWithResult(entity, res, statusCode) {
statusCode = statusCode || 200;
console.log("Populating Response");
res.status(statusCode).json(entity);
}