Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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中是否阻止对象文字_Javascript_Node.js_Asynchronous_Blocking_Promise - Fatal编程技术网

Javascript node.js中是否阻止对象文字

Javascript node.js中是否阻止对象文字,javascript,node.js,asynchronous,blocking,promise,Javascript,Node.js,Asynchronous,Blocking,Promise,对象文字是否会阻塞?我正在尝试将其他函数的结果存储在分页助手类中,我的Mocha测试由于超时而失败,因为回调没有返回。如果我从所有变量中移除local(即local.count到count),然后移除。然后按住回调并将其放在第一个中。然后它会突然工作 render: (model, query, cb) => self = @ count = 0 local = {} count_promise = @query_count model, que

对象文字是否会阻塞?我正在尝试将其他函数的结果存储在分页助手类中,我的Mocha测试由于超时而失败,因为回调没有返回。如果我从所有变量中移除
local
(即
local.count
count
),然后移除
。然后按住回调并将其放在第一个
中。然后
它会突然工作

   render: (model, query, cb) =>
    self = @ 
    count = 0 
    local = {}

    count_promise = @query_count model, query

    count_promise.then (c) ->
      local.count = c 
      local.pages = self.pages(count)
      local.prev_class = self.prev_class(pages)
      local.next_class = self.next_class(pages)
      local.prev_page = self.prev_page(pages)
      local.next_page = self.next_page(pages)
    .then ->
      cb({num_pages: local.pages, current_page: self.page, prev_class: local.prev_class, next_class: local.next_class, prev_page: local.prev_page, next_page: local.next_page, results: {}})

    .fail (err) ->
      throw new Error(err)

    return
编辑

我在回调之前添加了console.log,以查看是否显示了任何内容

.then ->
      console.log local
      cb({num_pages: local.pages, current_page: self.page, prev_class: local.prev_class, next_class: local.next_class, prev_page: local.prev_page, next_page: local.next_page, results: {}})
什么都没有

使用Sinon和Chai的这种特殊方法的摩卡测试代码断言:

describe 'PaginationHelper', ->

  describe 'Pagination Helper Initializes', ->
    it 'accepts page', ->
      assert.ok(new PaginationHelper(2))

  describe 'method testing', ->

    describe 'render method', ->
        ph = new PaginationHelper(2)
        result = {}

        before (done) ->
          ph.render BlogModel, {}, (res) ->
            result = res
            done()

        it 'returns object', ->
          assert.isObject(result)

        it 'returns object with num_pages', ->
          assert.property(result, "num_pages")

        it 'returns object with current_page', ->
          assert.property(result, 'current_page')

        it 'returns object with prev_class', ->
          assert.property(result, 'prev_class')

        it 'returns object with next_class', ->
          assert.property(result, 'next_class')

        describe 'render output testing', ->
          result = undefined

          before (done) ->
            ph = new PaginationHelper(1)
            ph.render BlogModel, {}, (res) ->
              result = res
              done()

          it 'returns a number for num_pages', ->
            assert.isNumber(result.num_pages)

          it 'returns a number for current_page', ->
            assert.isNumber(result.current_page)

          it 'returns string for prev_class', ->
            assert.isString(result.prev_class)

          it 'returns string for next_class', ->
            assert.isString(result.next_class)
此测试的结果输出:

Error: Command failed:   ✖ 1 of 35 tests failed:

  1) PaginationHelper method testing render method "before all" hook:
     Error: timeout of 2000ms exceeded

我解决了这个问题。直到深入研究了这个问题,我才正确地理解表的链接。变量中也有愚蠢的错误,我没有纠正。在极度疲劳时编码并不酷。下面是代码的外观:

render: (model, query, cb) =>
    self = @  

    count_promise = @query_count model, query

    count_promise.fail (err) ->
      throw new Error(err)
    .then (c) ->
      defer = Q.defer()
      local = {}
      local.count = c 
      local.pages = self.pages(local.count)
      local.prev_class = self.prev_class(local.pages)
      local.next_class = self.next_class(local.pages)
      local.prev_page = self.prev_page(local.pages)
      local.next_page = self.next_page(local.pages)
      defer.resolve(local)
      return defer.promise
    .then (local) ->
      cb({num_pages: local.pages, current_page: self.page, prev_class: local.prev_class, next_class: local.next_class, prev_page: local.prev_page, next_page: local.next_page, results: {}})
    return

我解决了这个问题。直到深入研究了这个问题,我才正确地理解表的链接。变量中也有愚蠢的错误,我没有纠正。在极度疲劳时编码并不酷。下面是代码的外观:

render: (model, query, cb) =>
    self = @  

    count_promise = @query_count model, query

    count_promise.fail (err) ->
      throw new Error(err)
    .then (c) ->
      defer = Q.defer()
      local = {}
      local.count = c 
      local.pages = self.pages(local.count)
      local.prev_class = self.prev_class(local.pages)
      local.next_class = self.next_class(local.pages)
      local.prev_page = self.prev_page(local.pages)
      local.next_page = self.next_page(local.pages)
      defer.resolve(local)
      return defer.promise
    .then (local) ->
      cb({num_pages: local.pages, current_page: self.page, prev_class: local.prev_class, next_class: local.next_class, prev_page: local.prev_page, next_page: local.next_page, results: {}})
    return

访问未定义值属性时出现异常,并且回调函数从未执行,因此在MochaThanks中等待应答超时。我认为local可以保留第一个值,然后是第二个值,然后我将插入更多的promise函数。为什么更高范围中的“局部”对象文本不像普通函数变量那样异步工作?我在前面的回答中可能错了。你能给出一个最简单的例子吗?我怀疑你的第二个
then
没有被调用(你能把
console.log
放在
cb
之前吗?@AndreySidorov我用修改过的代码对我的原始帖子进行了编辑。我做了一个console.log,但什么也没有得到。你可能是对的,第二个没有被调用。我还试着粘贴了一个“console.log local”在第一个结尾处。然后,也没有出现任何结果。@JPRichardson根据您的请求添加了内容。谢谢!您在访问未定义的值属性时出现异常,并且回调函数从未执行,因此在MochaThanks中超时以获得回复。我想local可以保留第一个的值。然后是第二个。然后,我将在插入更多承诺函数。为什么更高作用域中的“局部”对象文本不能像普通函数变量一样异步工作?我在前面的回答中可能错了。你能给出一个最小的自包含示例吗?我怀疑你的第二个
然后
没有被调用(你能把
console.log
放在
cb
之前吗?@AndreySidorov我用修改过的代码对我的原始帖子进行了编辑。我做了一个console.log,但什么也没有得到。你可能是对的,第二个没有调用。我还尝试粘贴了一个“console.log local”在第一篇文章的结尾。然后也没有出现任何问题。@JPRichardson根据您的要求添加了内容。谢谢!