2017-05-01 38 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(); 
相關問題