-->

如何当接收到错误的对象,你停止功能?(How do you stop a function when

2019-10-22 01:35发布

如何停止在发生错误的位置的功能。

我想提出一个HTTP POST调用。 我构建了一个错误,第一种样式的回调函数。

如何停止的回调函数,如果一个错误对象是在它通过呢? 在我的使用情况下,我需要,我需要的回调函数随后链中的数据对象停止不管错误类型。

难道仅仅return ? 我读上了一个台阶,从而希望能得到确认,如果我的代码是正确的,我想实现什么做什么回报。

我只是想确保程序回调函数不继续他们不会传递任何数据对象,因此,都将是“错误”

server.js

var request = function(callback) {
  // HTTP call to server
      },  
      function (error, response, body) {    
      if (!error && response.statusCode === 200) {
        // processed and created data object
          return callback(null, data)
      }
      else {
         console.log(error.stack)
         return callback(error) ;
      }
    })
};
var requestSync = Meteor.wrapAsync(request);


var callback = function(error, data, callback) {
  if (error) {
    // How do I properly stop this function?
     return callback(new Error('custom message I send to client'))
  }
  else {
    // doing something with data object..
  }
}

该功能是我的方法中调用。

try {
  var resultOne = requestSync()
  var resultTwo = callback(resultOne)
  // more async callback functions will reside here
} catch (e) {
  console.error('error occured somehwere = ' + e);
} finally {
//
}

Answer 1:

我还没有看到编码之前的正是这种方式,所以很难评论,如果这是不知道一个多一点有关你真正想要做的正确方法。 我假设块:

try {
  var resultOne = requestSync()
  var resultTwo = callback(resultOne)
  // more async callback functions will reside here
} catch (e) {
  console.error('error occured somehwere = ' + e);
} finally {
}

...调用比第一个代码段的另一个“回调”函数(或者你正在过resultOne作为第一个参数,回调函数会看这是一个有效的错误对象,并抛出一个错误)。

然而,回答您的问题,如果代码将继续投放的功能之一抛出一个错误,答案是否定的 - 这将直接转移到catch块。 看一看: 在MDN本文档

特别是这部分:

catch子句包含指定了一个异常在try块抛出做什么声明。 也就是说,想要try块成功,如果不成功,你要控制传递给catch块。 如果try块(或在try块内调用的函数)中的任何语句抛出一个异常,控制立即转移到catch子句。 如果没有异常在try块抛出,catch子句被跳过。

我希望这回答了你的首要问题。 因为你似乎来包装Meteor.wrapAsync所有异步调用(),他们应该等待结果调用一个函数,如果正确实施前返回。 我可以推荐给看看这个答案对实施wrapAsync和处理错误的正确方法的更多信息。

UPDATE

我认为这是有趣做出了榜样出来,因为这个职位已经越来越长。 看看这个例子,我上传至Github上 ,它可能给你所需要的答案。

因此,从总被看作是一个错误的对象HTTP调用传回了“错误”的对象?

那么,纤维/未来呈现标准节点回调作为与误差对象作为第一个参数和一个结果对象作为第二个的最后一个参数。 只要是这样的错误会被逮住的“catch”块,执行会停止的情况。

如果是这样,我怎么可以追加另一场这样的错误是有道理的,我呢?

舒尔不正是你想到这里,但看看我的Github上的例子。 在那里,我创建一个错误对象。 如果你不是使用的setTimeout(这里我只是模拟一个异步调用),构造你的函数以同样的方式,从远程调用捕获错误的对象,一个字段追加到它或改变err.message更有意义给你,然后调用回调我认为应该工作,但我已经不只是测试。

如果有错误,但没有错误对象传递,什么是节点约定创建一个错误对象,我可以回来吗?

再次见的例子。 wrapAsync只在服务器上运行,它假定你怎么称呼它在功能上有所回调作为最后一个(或唯一的)参数。 该回调应该有一个误差作为第一个参数,并且结果作为第二。 大多数节点功能(如果不是全部)将遵守这些规则。

如果出于某种原因想自己处理回调,您需要舒尔手动调用回调,并通过在“零”作为第一个参数,如果没有错误,或者创建一个错误的对象,并通过在作为第一个参数,如果有一个误差。 看看的例子wrapAsyncTest.js。



Answer 2:

更使Node.js的格局,但在这里我用的是什么:

if (err) return callback(err, null);
console.log("no error here!");
callback(err, result);


文章来源: How do you stop a function when an Error object is received?