【问题标题】:make function wait for a promise to return nodejs使函数等待返回nodejs的承诺
【发布时间】:2015-10-26 21:25:04
【问题描述】:

我正在使用 Q 库并想让 promise2 函数等到 promise1 函数完成执行。

在以下示例中,promise2 函数在 promise1 函数完成执行之前执行。

我在这里做错了什么?

var Q = require("q");
var fs = require('fs');

function promise1() {
  var deferred = new Q.defer();
  fs.readFile('hostname.json', function (err, data) {
    if (err){
      return  console.error(err)
    }else {
      console.log('file read');
      return deferred.resolve(JSON.parse(data));
    }
  });
  return deferred.promise;
}
function promise2(){
  var deferred = new Q.defer();
   var path = 2;
    console.log("2");
  return deferred.resolve(path);
}

Q(promise1())
  .then(promise2());

这里是工作示例,由于 readfile 不存在,可能会出错,但它确实存在于我的开发环境中。

I get the following result when I run:
>2
>file read

Result I want:
>file read 
>2

【问题讨论】:

    标签: node.js q


    【解决方案1】:

    当您编写promise2() 时,您会立即执行它。试试:

    promise1().then(promise2);

    【讨论】:

    • 所以应该是 Q(promise1()).then(promise2);
    • Q() 对我来说是多余的。但是当 javascript 看到一个方法调用 () 时,它会执行该函数。在您原来的情况下,为了解决对.then() 的调用,您传入了函数调用而不是函数定义。您可以通过here 彻底阅读他们的文档。
    猜你喜欢
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    相关资源
    最近更新 更多