Javascript匿名函数然后调用

时间:2015-12-17 06:42:18

标签: javascript promise bluebird

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))
    })
};

2 个答案:

答案 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);
}