2016-05-16 72 views
0
const dbConnection = require("../dbConnection");  

var task = function() { 
    var response = ""; 
    dbConnection.then(function() { 
     //do something here 
     response = "some value";    
    }) 
    .catch(function() { 
     response = new Error("could not connect to DB"); 
    }); 

    //I can't return response here because the promise is not yet resolved/rejected. 
} 

我正在使用其他人編寫的節點模塊。它返回一個承諾。我想返回一個字符串或new Error(),具體取決於模塊返回的Promise對象是否已解析。我怎樣才能做到這一點?根據是否已解析Promise從函數返回值

我不能finally()回調中返回或者因爲那return將適用於回調函數不是我task功能。

+0

爲什麼你不能原樣使用該模塊? –

回答

0

dbConnection.then().catch()本身會返回一個承諾。考慮到這一點,我們可以簡單地將代碼編寫爲return dbConnection.then(),並讓代碼使用該函數將返回值視爲承諾。例如,

var task = function() { 
    return dbConnection.then(function() { 
    return "Good thing!" 
    }).catch(function() { 
    return new Error("Bad thing.") 
    }) 
} 

task().then(function(result){ 
    // Operate on the result 
} 
0
const dbConnection = require("../dbConnection");  

var task = function() { 
    var response = ""; 
    return dbConnection.then(function() { 
    //do something here 
    response = "some value"; 
    return response; 
    }) 
    .catch(function() { 
    response = new Error("could not connect to DB"); 
    return response; 
    }); 
} 

這將返回一個承諾,你可以再鏈條。

使用承諾的點是類似於使用回調。您不希望CPU坐在那裏等待響應。

相關問題