[英]Nodejs promise not working as it should?
我正在使用nodejs和库Promises / A +(选择这一个,因为它似乎最受欢迎)选择https://www.npmjs.com/package/promise 。 我面临的问题是,即使异步功能已按预期完成,但在失败声明后仍已完成。 所以sv + ' No it failed'
总是在async方法中的console.log消息(表明成功)之前打印。 此console.log消息应该先打印出来,因为它在async方法内部。 我被困住为什么会这样? 即使异步方法成功返回后,promise也总是在失败时运行?
我的代码:
var promise = new Promise(function (resolve, reject) {
var u = asyncmethod(some_var);
if (u){
resolve(some_var)
}
else{
reject(some_var);
}
});
promise.then(function(sv) {
console.log(sv + ' Yes it worked');
}, function(em) {
console.log(sv + ' No it failed');
});
您的异步方法有问题,应该是异步功能
var promise = new Promise(function (resolve, reject) {
//var u = asyncmethod(some_var); // <-- u is not defined, even if you return result stright, as it's the nature of async
asyncmethod(some_var, function(err, result){ //pass callback to your fn
if(err){
reject(err);
} else {
resolve(result);
}
});
});
promise.then(function(successResponse) { //better name variables
console.log(successResponse + ' Yes it worked');
}, function(errorResponse) {
console.log(errorResponse + ' No it failed');
});
//and simple implementation of async `asyncmethod`
var asyncmethod = function(input, callback){
setTimeout(function(){
callback(null, {new_object: true, value: input});
}, 2000); //delay for 2seconds
}
注意:顾名思义,此答案认为asyncmethod
是异步的
您做错了,是否阅读了有关诺言的任何文档? 首先,您不需要额外的程序包,nodejs已经包含Promise。
如果asyncMethod
是一个承诺,则可以直接执行以下操作:
var promise = asyncmethod(some_var);
promise.then(function (sv) {
console.log(sv + ' Yes it worked');
}, function (em) {
console.log(sv + ' No it failed');
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.