Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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 茉莉花&x2B;异步函数_Javascript_Node.js_Promise_Jasmine_Async Await - Fatal编程技术网

Javascript 茉莉花&x2B;异步函数

Javascript 茉莉花&x2B;异步函数,javascript,node.js,promise,jasmine,async-await,Javascript,Node.js,Promise,Jasmine,Async Await,这是我的密码: 'use strict'; var unitID = 0; var getById = function(generalOptions, specificOptions) { describe('API tests for: ' + specificOptions.name, function() { var url = generalOptions.baseUrl + specificOptions.route; // GET all items it('= =

这是我的密码:

'use strict';

var unitID = 0;

var getById = function(generalOptions, specificOptions) {


describe('API tests for: ' + specificOptions.name, function() {
var url = generalOptions.baseUrl + specificOptions.route;



// GET all items
it('= = = GET ALL test for ' + specificOptions.name + ' return status 
code 200',  function(done) {
  generalOptions.request.get({
    url: url
  }, function(error, response, body) {
    expect(response.statusCode).toBe(200);
    expect(JSON.parse(body)).not.toBeFalsy();

    if (specificOptions.route == '/devices/') {
      var bodyJS = JSON.parse(body);
      unitID = bodyJS.devices[0].id;
    } else {
     unitID = '';
    }
    console.log('Result 1 - ' + unitID);
    done();

  });
});


//GET by ID
it('= = = GET by ID test for ' + specificOptions.name + ' return status code 200', function(done) {
  console.log('Result 2 - ' + unitID);
  generalOptions.request.get({
    url: url + unitID
  }, function(error, response, body) {
    expect(response.statusCode).toBe(200);
    expect(JSON.parse(body)).not.toBeFalsy();
    done();
      });
    });
  })
};

module.exports = getById;
我需要等待,
unitID
将用第一个GET请求更新,然后在下一个请求中使用

问题是,它异步工作,并且在第二个请求中
unitID
保持0

可以演示如何使用异步/等待或承诺实现解决方案吗? 谢谢

出于调试原因,我使用console.log。现在它打印:
结果2-0


结果1-59dffdgfdgfg45545g

您不应该以一个测试的输出进入另一个测试的方式编写测试。每个“它”应该是独立的


相反,您应该进行两次调用(嵌套调用)以实现unitID的值,或者理想情况下,您应该模拟服务以返回“it”所期望的数据。

如果我的想法是正确的,不久前我遇到了这样一个问题,在git上的某个地方读到了一个答案,我可以使用
timeout
,这样我的GET请求测试就可以通过了。我使用了
这个.timeout(24000)。您可以在这里查看:。这方面的编码仍然是模糊的,我很抱歉,如果这是没有用的。