2017-05-01 37 views
0

您好我在nodejs中使用async/await有些问题。我想用这种方式node js async/await函数中的请求

//foo.js  

    var rp = require('request-promise'); 

    function Foo(options) { 
     this.options = options; 
    } 

    function create() { 
     return new Foo(login()); 
    } 

    async function login() { 
     const options = { 
      method: `POST` 
      ,json: true 
      ,uri: `http://xxxxxx/login` 
      ,body: {username: 'abcd', password: '1234'} 
     }; 
     try { 
      const response = await rp(options); 
      return Promise.resolve(response) 
     } 
     catch (error) { 
      return Promise.reject(error); 
     } 
    } 
    module.export.create = create; 

所以我呼吁创建了我的测试中使用这种进我厂与我期望的是回报将登录后执行,但流量不是这个!

var Foo = require('foo'); 

describe('using my utils into project', function() { 

     it('using real case', function (done) { 

      var foo = Foo.create(); 
      console.log(foo.options); 
      done(); 
     }); 

    }); 

测试返回我OK,但在控制台我看到的登录过程后Promise { <pending> }没有真实的反应。 我的错误在哪里?以这种方式正确工作?

+5

一如往常,这是不可能的异步代码转换成同步的。甚至没有异步/等待。 async关键字返回一个promise,而不是一个值。这是因为代码是异步的,并且在函数被调用时不能返回值。我强烈建议先学习承诺,然后再使用async/await – slebetman

+0

好的,但我可以正确使用async/await吗?这是我的麻烦 –

+0

@slebetman等待接受承诺,并等待它可用的价值,然后返回该值。这是对的吗? –

回答

0

试试这个

//foo.js  

var rp = require('request-promise'); 

function Foo(options) { 
    this.options = options; 
} 

async function create() { 
    var temp = await login() 
    return Promise.resolve(new Foo(temp)); 
} 

function login() { 
    return new Promise(async(resolve, reject) => { 
     const options = { 
      method: `POST` 
      ,json: true 
      ,uri: `http://xxxxxx/login` 
      ,body: {username: 'abcd', password: '1234'} 
     }; 
     try { 
      const response = await rp(options); 
      return resolve(response) 
     } 
     catch (error) { 
      return reject(error); 
     } 
    }); 
} 
module.export.create = create; 

async function main() { 
    var foo = await Foo.create(); 
    console.log(foo.options); 
} 

main(); 
相关问题