js promise没有正确关闭
js promise which is not closed correctly
我有以下代码,在代码中,当我在if语句(if (that.cont) )
中输入时,我得到了一个未完成的承诺链的错误,这可能是什么原因,我应该如何避免?
run: function() {
var oDef = Q.defer();
var Obj = Q(sWUrl);
if (that.cont) {
Obj = that.cont.get(that.cont.transl).then(function(mSet) {
debugger;
if (mSet) {
var lang = mSet.supportedLang;
var dft = mSet.defaultLang;
if (!dft) {
if (lang) {
dft = lang.split(",")[1];
} else {
dft = "en";
}
}
return Q(sWUrl + "&lang=" + window.encodeURIComponent(lang));
} else {
return Q(sWUrl);
}
}, function() {
return Q(sWUrl);
}).then(function(sUri) {
return that.cont.se.pre.get("Pre").then(function(oPreSet) {
return sUri + "&device=" + window.encodeURIComponent(oPreSet.dte);
}).fail(function(error) {
return sUri;
});
});
}
return Obj.then(function(sUri) {
oWin.window.location.href = sUri;
return oWin.oDef.promise;
});
},
我不知道这个错误是从哪里来的,但有一点是肯定的——无论你从run
返回什么,都永远不会解决,因为你永远不会解决oDef
(你使用的是"延迟反模式")。
你似乎也错误地认为你有从你的处理者那里返回一个承诺(尽管你忘记了在一个地方这样做),但这不是真的。如果没有什么可等待的,您可以直接返回普通值。
试试看:
run: function() {
var p;
if (that.cont) {
p = that.cont.get(that.cont.transl).then(function(mSet) {
if (mSet) {
var lang = mSet.supportedLang;
var dft = mSet.defaultLang;
if (!dft) {
if (lang) {
dft = lang.split(",")[1];
} else {
dft = "en";
}
}
return sWUrl + "&lang=" + window.encodeURIComponent(lang);
} else {
return sWUrl;
}
}, function() {
return sWUrl;
}).then(function(sUri) {
return that.cont.se.pre.get("Pre").then(function(oPreSet) {
return sUri + "&device=" + window.encodeURIComponent(oPreSet.dte);
}).fail(function(error) {
return sUri;
});
});
} else {
p = Q(sWUrl);
}
return p.then(function(sUri) {
oWin.window.location.href = sUri;
});
},
相关文章:
- js promise没有正确关闭
- 嵌套的promise节点js
- async问题,JS Promise无法返回结果,但可以使用console.log
- Ember.js:将Em.$.getJSON转换为promise并将响应绑定到控制器上下文的正确方法
- Node.js Promise - 代码不应该等到 .then 完成()
- 如何使用node.js和promise编写同步while循环
- 如何使用promise正确处理express.js中的错误(字符串或对象)
- 如何在node.js中使用promise进行同步http调用
- 正在读取angular js promise中的NegotiatedContentResult对象(从WebAPI发送)
- Yield does not resolve Promise node.js
- While循环使用JavaScript/node.js中的A+promise
- 如何使用odatarsources.JS库正确解析AngularJS应用程序中的JS promise
- Node.js中的Promise.all没有't调用then函数
- 如何在 Sequelize Js 中使用 Promise 来返回实体
- 在 Node.js 中用 promise 替换回调
- Ember.js加载模板上的Per-Model Promise状态
- Ember.js:路由返回多个模型,包括一个promise,给出错误
- 在 Angular JS 中使用 promise 更新服务
- 使用 setTimeout 在 js 中使用 Promise 的重复函数
- 如何调用HTTP请求使用Request -promise.js与许多url