[英]How do I use a nodjes promise value in another function
我在nodejs中有兩個功能。 一個看起來像這樣
function checkAdd (
address /* : string | void */
) /* :Promise<Object[]> */ {
var convertToLowerCase = address.toLowerCase()
return Promise.resolve()
.then(() => {
var allMatch = addressesAsJson.filter((record) => record.address === convertToLowerCase)
});
}
還有另一個這樣的功能
function saveNewAd(
address /* :?string | void */, cb
) /* :Promise<string> */ {
return new Promise((resolve, reject)=> {
var checkAddress = checkAddressAvailable(address)
var addressAvailableResult = checkAddressAvailable(address)
var seperatedAddress = address.split(',')
var firstAddLine = capitalFirstLetter(seperatedAddress[0])
var secondAddLine = seperatedAddress[1].toUpperCase()
var thirdAddLine = seperatedAddress[2].toUpperCase()
var displayAddress = firstAddLine + ',' + secondAddLine + ',' + thirdAddLine
addressesAsJson.push({"address": address , "display" : displayAddress})
fs.writeFile(jsonListPath, JSON.stringify(addressesAsJson), (err) => {
if (err) reject(err)
resolve("New address is saved")
})
});
}
在saveNewAd內部,我要檢查allMatch長度,如果長度大於0,則需要執行saveNewAd的函數體。 但這不起作用。 這就是我嘗試過的。 請幫我解決這個問題
function saveNewAd(
address /* :?string | void */, cb
) /* :Promise<string> */ {
return new Promise((resolve, reject)=> {
var results = checkAdd(address)
if(results.length>0){
/*same function body as above method*/
})
}else{
console.log("Error")
}
});
}
您必須利用鏈接,即首先異步找到allMatch
,然后將此值向下傳遞給saveNewAd
.then()
並作為參數傳遞給saveNewAd
函數。 請注意, .then()
函數實際上返回的是新的Promise,與原始的有所不同。
function checkAdd (
address /* : string | void */
) /* :Promise<Object[]> */ {
return new Promise((resolve, reject)=> {
var convertToLowerCase = address.toLowerCase();
var allMatch = addressesAsJson.filter((record) => record.address);
resolve(allMatch);
}
}
checkAdd()
.then((allMatch) => {
saveNewAd(address, cb, allMatch); // now you can use allMatch as an argument in this function
}
===
MDN文檔: 使用Promises 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.