2016-11-20 24 views
0

我使用Sequelize數據庫orm,並通過這個代碼從無極我返回的結果是<pending>

model.create(
    { 
     username: 'John' 
    }).then(function (result) { 
    return result.userUniqueId; 
}); 

我可以在數據庫中創建新的用戶,我可以打印userUniqueIdthen()內。

後創建的用戶我想在其他函數中使用返回userUniqueId或只打印在控制檯上,但我不能從返回result.userUniqueId,爲解決這個問題,我試圖用Promise得到的結果,那麼我部署那到:

'use strict'; 

module.exports = { 
    createNewUser: function (model) { 
     return new Promise(
      function (resolve, reject) { 
       model.create(
        { 
         username: 'John' 
        }).then(function (result) { 
        return result.userUniqueId; 
       }); 
      }) 
      .then(function (result) { 
       resolve(result.userUniqueId); 
      }); 
    }, 
}; 

,但我得到createNewUser功能之外這一結果爲console.log(controller.createNewUser(models.users));

結果:

Promise { <pending> } 

我該如何解決這個問題?

UPDATE:

'use strict'; 

module.exports = { 
    createNewUser: function (model) { 
     return new Promise((resolve, reject) => { 
      return model.create(
       { 
        username: 'John' 
       }) 
       .then(function (result) { 
        return result.userUniqueId; 
       }) 
       .then(value => resolve(value)); 
     }); 
    }, 
}; 

var userId = controller.createNewUser(models.users) 
     .then(function (userId) { 
      return userId; 
     }); 

console.log(userId); 

打印無極對象

回答

0

這是沒有問題的。除了已解決或拒絕創建的承諾外(分別直接分別使用Promise.resolve()Promise.reject()),所有承諾都將以「掛起」狀態創建。

當Promise的resolve()函數被調用時,該狀態將改變。

順便說一句,你落入了Promise構造函數的反模式。取而代之的是:

return new Promise((resolve, reject) => { 
    doSomething() 
    .then(value => resolve(value)); 
}); 

只是做

return doSomething() 

無需包裝與附加承諾構造承諾。

+0

我的崗位在您的幫助更新的,但我又得到承諾的對象 –

0

正如任何承諾,你需要使用then來訪問它的結果值:

controller.createNewUser(models.users) 
    .then(function (userId) { 
     // do something with the ID 
    }); 

不能直接因爲承諾可能還沒有解決的承諾訪問值。

同樣,馬達拉指出,你已經陷入了明確的承諾建設反模式。擺脫多餘代碼:

module.exports = { 
    createNewUser: function (model) { 
     return model.create(
      { 
       username: 'John' 
      }) 
      .then(function (result) { 
       return result.userUniqueId; 
      }); 
    }, 
}; 
+0

對不起,先生,我想我不明白究竟什麼是您的意思是,我的後更改代碼到你的代碼作爲'module.exports'我得到Promise對象和你的代碼爲'controller.createNewUser(models.users)...'不解決我的問題,因爲我必須在'then()'裏面使用結果,並且我想將變量賦值爲'createNewUser'函數 –

+0

我的文章更新了先生 –

+0

@ tux-world向我們展示您嘗試使用返回'createNewUser'的值,而不僅僅是一行。 – JLRishe