- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我对 Angular JS deferred 和 $q 感到困惑。我找到了这个 SO Question这解释了 $q.defer()
和 $q
之间的区别。它解释了
$q.reject is a shortcut to create a deferred and then reject it immediately
所以 $q.reject()
必须等于
var deferred = $q.defer(); deferred.reject()
,如果不是请说明两者的实际区别。
但在我的例子中,$q.reject()
正在工作,但是 deffered.reject()
没有工作。我们还需要像 $q.reject()
但不是 deferred.reject()
那样返回被拒绝的 promise 。我见过 deffered.reject()
这是代码
var deferred = $q.defer();
myService.getData()
.then(function(response){
deferred.notify('Just a notification');
deferred.reject('rejected');
})
.then(function(response) {
console.log('done');
}, function(response) {
console.log('rejected');
})
这不起作用,但是当我将 deferred.reject
替换为 $q.reject()
时,promise 已被拒绝并且控件移至错误接下来的 then block 的功能。
非常感谢任何帮助。提前致谢。
最佳答案
当您使用 deferred.reject
时它不起作用,因为您没有返回新的被拒绝的 promise 。您可以同时使用 $q.reject()
和 deferred.reject()
,您只需要在这两种情况下都返回一个 promise。
你需要明白这一点
$q.reject()
被拒绝的promise对象deferred.reject()
不是 promise,而是延迟对象,它在其属性之一(即 $promise
)中拒绝了 promise >).所以你可以返回任何对象或值,它将成为一个新的 promise 对象,并将传递给链中的下一个 then block 。但是,当您返回 deferred.reject()
时,它将作为某个对象传递(再一次,它不是一个 promise,但它内部有一个 promise)下一个 promise 当然会成功解决。
如果您返回相应的 promise,它也可以与 deferred
一起正常工作:
var deferred = $q.defer();
myService.getData()
.then(function(response) {
deferred.notify('Just a notification');
deferred.reject('rejected');
return deferred.promise;
//return $q.reject();
})
.then(function(response) {
console.log('done');
}, function(response) {
console.log('rejected');
});
最后回答你的问题:$q.reject()
是一个状态为“rejected”的 promise 对象。 deferred.reject()
不是一个 promise ,但它在内部拒绝了 promise 对象作为deferred.$promise
。用什么?您应该使用 $q.reject()
,在这种情况下使用虚拟延迟对象是多余的并且被认为是不好的做法,事实上它甚至有一个名称 deferred anti-pattern .
关于javascript - AngularJS deferred.reject 不工作但 $q.reject 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31359974/
我一直在努力理解下面两个的区别,哪个是空闲的使用方式: let getClient = () => { return connect() .then((client) => {
我正在学习一门关于 JavaScript 函数式编程的很棒的在线类(class)。在讲师使用 Array.prototype.reject() 并且它在运行时对我不起作用之前,我一直很好。 我想使用“
这个问题在这里已经有了答案: Do I need to return after early resolve/reject? (6 个答案) 关闭 6 年前。 我是 Promise 的新手,我想知道
我对 Angular JS deferred 和 $q 感到困惑。我找到了这个 SO Question这解释了 $q.defer() 和 $q 之间的区别。它解释了 $q.reject is a sh
我正在尝试处理 Angular $q 服务及其相关对象和 API。当我查看控制台中的对象时,我看到: var deferred = $q.defer() ...(and then from conso
我在运行测试时遇到问题(在 Node 中), 我正在模拟一个被拒绝的 promise ,我的代码应该重试(使用 promise-retry 如果可能相关的话)。 当我使用 stub.returns(P
当我编译或运行它时,程序会显示正确的信息。问题是当我检查程序时。它显示“:(拒绝”“分钟检查我的时等待输入被拒绝时超时”程序。我也尝试使用 GetInt 和 get_int 。你能帮助我吗,请? in
对于 Ruby 中的 Hash,reject! 和 reject 与 delete_if 有何不同?谁能用简单的代码片段解释它们之间的区别? 最佳答案 由于其他答案指的是 Array#delete_i
当我尝试使用 Firestore 获取数据时,出现上述错误 - 我正在尝试从数据库检索 token ,以便可以发送消息: exports.getUsers = functions.https.onRe
这个问题在这里已经有了答案: Are JavaScript forever-pending promises bad? (2 个答案) 关闭 4 年前。 问题是这样的 function demo()
您好,我正在尝试调用返回 promise 的异步函数 makeRemoteExecutableSchema。 async function run() { const schema = await
我发出的每个 http 请求似乎都会出现此错误。我不太确定它来自哪里? (node:39390) UnhandledPromiseRejectionWarning:未处理的 promise 拒绝(拒绝
我的代码运行良好,但今天运行时发生了这种情况: (node:8592) UnhandledPromiseRejectionWarning: Unhandled promise rejection (r
我正在尝试从 mlabs 连接 mongodb。我插入了以下代码: Mongoose.connect('mongodb://:@ds163402.mlab.com:63402/projecttwist
我已将 Cucumber 与 nightwatch.js 集成。 我的 package.json 看起来像:- { "name": "learning-nightwatch", "versio
目前,我在“Javascript”代码中遇到了 promise 问题。它不断抛出“TypeError: res.status(...).json(...).catch is not a functio
首先,请看这个demo。 function loadImageAsync(url) { return new Promise(function(resolve, reject) { var
我已经在这个问题上工作了很长时间,但我无法真正解决它。当我执行 ionic Cordova build android 时,它运行良好,直到它到达 Cordova build android,任何人都
不知道是什么导致了这个问题。昨天它运行良好。今天,当我尝试运行 react-native run-android 时。我收到这个错误。有任何想法吗? Starting JS server... Run
我是第一次使用.then,而不是.then我使用回调函数。 下面是我的代码片段: phantom.create().then(function (ph) { ph.createPage().t
我是一名优秀的程序员,十分优秀!