2017-02-14 104 views
2

我是新來的Node js Promise我不確定我是否正確使用Promise,因此這裏是我的代碼。如何使用Node Js Promise按順序執行函數?

function print(){ 

    first('first') 
    .then(second('second')) 
    .then(third('third')); 
} 

function first(a){ 
    return new Promise((resolve, reject) => { 
     var res1 = function(){ 
      resolve(a); 
     }  
    }); 
    console.log(a); 
} 

function second(b){ 
    return new Promise((resolve, reject) => { 
     var res1 = function(){ 
      resolve(b); 
     }  
    }); 
    setTimeout(() => { 
     console.log(b); 
    }, 2000); 
} 

function third(c){ 
    return new Promise((resolve, reject) => { 
     var res1 = function(){ 
      resolve(c); 
     }  
    }); 
    console.log(c); 
} 

我期望的輸出是

first 
second 
third 

相反,我所得到的是

first 
third 
//after two seconds 
second 

我失去了一些東西,但我無法弄清楚,請給我解釋一下

+0

然後期望的功能,因爲它的參數(S) - 運行的功能沒有結果! –

+0

你的代碼不會產生任何輸出 - 它在每個函數中都有語法錯誤,並且在第一,第二和第三個代碼中有無法訪問的代碼 - 並且第一,第二或第三個代碼都不會解析任何代碼...在代碼 –

回答

2

要獲得預期的行爲,您需要在超時(控制檯日誌旁邊)內部有resolve。您也不能將參數傳遞給承諾鏈函數,因爲他們需要接受前一個thennable的承諾。

的工作片斷如下:

print(); 
 

 
function print(){ 
 
    first('first') 
 
    .then(second) 
 
    .then(third); 
 
} 
 

 
function first(a){ 
 
    return new Promise((resolve, reject) => { 
 
    \t \t console.log(a); 
 
     resolve(a); 
 
    }); 
 
} 
 

 
function second(b){ 
 
    return new Promise((resolve, reject) => { 
 
     setTimeout(() => { 
 
     \t \t console.log("second"); 
 
     \t \t resolve(b); 
 
     }, 2000); 
 
    }); 
 

 
} 
 

 
function third(c){ 
 
    return new Promise((resolve, reject) => { 
 
    \t \t console.log("third"); 
 
     resolve(c) 
 
    }); 
 
}

+0

謝謝。現在工作正常。 –