Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有node.js等待的Q异步库_Javascript_Node.js_Asynchronous_Q_Mean Stack - Fatal编程技术网

Javascript 具有node.js等待的Q异步库

Javascript 具有node.js等待的Q异步库,javascript,node.js,asynchronous,q,mean-stack,Javascript,Node.js,Asynchronous,Q,Mean Stack,我真的很难在nodejs中使用Q模块 下面是我的代码。它在runnable.com上运行得很好,但当我将它放入我的一个控制器方法(按原样)中时,它只是一直在等待,我可以告诉它调用的第一个方法。但它一直在等待。我做错了什么。我已经花了两天时间在这上面了:( 更新: 将Q.ninvoke更改为Q.invoke,并使用Q的v2.0,这不再可用。我发现错误invoke未定义 改为使用Q的v1.0,现在下面的工作很好 var Q = require('q'); function Apple(type)

我真的很难在nodejs中使用Q模块

下面是我的代码。它在runnable.com上运行得很好,但当我将它放入我的一个控制器方法(按原样)中时,它只是一直在等待,我可以告诉它调用的第一个方法。但它一直在等待。我做错了什么。我已经花了两天时间在这上面了:(

更新:

将Q.ninvoke更改为Q.invoke,并使用Q的v2.0,这不再可用。我发现错误invoke未定义

改为使用Q的v1.0,现在下面的工作很好

var Q = require('q');

function Apple(type) {
    this.type = type;
    this.color = "red";

    this.getInfo = function() {
        return this.color;
    };
}

var apple = new Apple('macintosh');
apple.color = "reddish";

Q.invoke(apple, 'getInfo')
    .then(function(color) {
        console.log(color);
    })
    .fail(function(err) {
        console.log(err);
    });
,需要Node.js样式的方法。Node.js样式的方法接受回调函数,该函数将在出现错误或执行结果时调用

因此,如果您可以将
getInfo
函数更改为接受回调函数,并在必须返回结果时调用它,那么您的程序将正常工作,如下所示

var Q = require('q');

function Apple(type) {
    this.type = type;
    this.color = "red";

    this.getInfo = function(callback) {
        return callback(null, this.color);
    };
}

var apple = new Apple('macintosh');
apple.color = "reddish";

Q.ninvoke(apple, 'getInfo')
    .then(function(color) {
        console.log(color);
    })
    .fail(function(err) {
        console.error(err);
    });
var Q = require('q');

function Apple(type) {
    this.type = type;
    this.color = "red";

    this.getInfo = function() {
        return this.color;
    };
}

var apple = new Apple('macintosh');
apple.color = "reddish";

Q.invoke(apple, 'getInfo')
    .then(function(color) {
        console.log(color);
    })
    .fail(function(err) {
        console.log(err);
    });
注意:因为您没有使用Node.js样式的方法,所以应该像这样使用而不是
Q.ninvoke

var Q = require('q');

function Apple(type) {
    this.type = type;
    this.color = "red";

    this.getInfo = function(callback) {
        return callback(null, this.color);
    };
}

var apple = new Apple('macintosh');
apple.color = "reddish";

Q.ninvoke(apple, 'getInfo')
    .then(function(color) {
        console.log(color);
    })
    .fail(function(err) {
        console.error(err);
    });
var Q = require('q');

function Apple(type) {
    this.type = type;
    this.color = "red";

    this.getInfo = function() {
        return this.color;
    };
}

var apple = new Apple('macintosh');
apple.color = "reddish";

Q.invoke(apple, 'getInfo')
    .then(function(color) {
        console.log(color);
    })
    .fail(function(err) {
        console.log(err);
    });

事实上,这两种情况下都不会执行then块!请直接从我的重点帮助:“
ninvoke
使用给定的变量参数调用Node.js样式的方法,如果该方法返回结果,则返回满足的承诺,如果返回错误,则返回拒绝的承诺。”-Your
getInfo()
两者都不起作用,所以这当然永远不会起作用。@Tomalak你说的getInfo()是什么意思什么都不做。文档中的那句话真的再清楚不过了。我甚至在我的评论中把相关部分加粗了。那么void函数如何工作呢?非常感谢!!要么文档不清楚,要么我是一个完全的noob。我不得不更改它,因为它已被弃用。@user3428172的版本是什么
q
您使用的是?@user3428172您得到的确切错误是什么?invoke未定义或类似。我可以看到github说2.0是实验性的,所以我应该使用1?@user3428172请用确切的错误信息编辑问题,只有这样我才能帮助您:(