第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何解決承諾?

如何解決承諾?

慕尼黑8549860 2022-08-27 14:10:03
我有一個(gè)腳本,可以執(zhí)行很多承諾。基本上,我的腳本“Task”在將新記錄添加到數(shù)據(jù)庫時(shí)啟動(dòng)?;诖擞涗?,我向 API 發(fā)出請(qǐng)求并獲取結(jié)果數(shù)組。然后,我將這些結(jié)果保存到數(shù)據(jù)庫中。然后,我使用相同的結(jié)果數(shù)組向用于獲取圖像的另一個(gè) api 發(fā)出每個(gè)結(jié)果的請(qǐng)求。然后,所有這些圖像都將上傳到S3。因此,對(duì)于我執(zhí)行的每個(gè)任務(wù),我都會(huì)觸發(fā)很多請(qǐng)求,對(duì)數(shù)據(jù)庫的查詢,更新等。所有這些都在承諾中得到解決。所以我的問題是,如果我在數(shù)據(jù)庫中插入許多“任務(wù)”記錄會(huì)發(fā)生什么?承諾執(zhí)行的順序是什么?程序會(huì)等到第一個(gè)任務(wù)(和子任務(wù))結(jié)束嗎?或者程序會(huì)按任務(wù)獨(dú)立拋出結(jié)果,而其他任務(wù)也在解決?這是因?yàn)槲也荒艿鹊降谝粋€(gè)任務(wù)的所有承諾都得到解決才能開始執(zhí)行下一個(gè)任務(wù)。如果您有其他問題,請(qǐng)告訴我,我可以更新問題。
查看完整描述

2 回答

?
子衿沉夜

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

下面是您的任務(wù)的實(shí)現(xiàn)。這澄清了承諾執(zhí)行的順序。onRecordAddTask


const requestAPI = record => {/* make API request */}


const saveToDatabase = result => {/* save result to database */}


const getImages = apiResult => {/* make images API request */}


const flatten = arr => arr.flat(1)


const uploadToS3 = image => {/* upload to s3 code */}


const onRecordAddTask = async record => {

  const results = await requestAPI(record)

  const [arraysOfImages,] = await Promise.all([

    await Promise.all(results.map(getImages)),

    await Promise.all(results.map(saveToDatabase)),

  ])

  await Promise.all(flatten(arraysOfImages).map(uploadToS3))

}

onRecordAddTask應(yīng)將每個(gè)新插入的記錄一起調(diào)用到數(shù)據(jù)庫中。該任務(wù)請(qǐng)求包含您的記錄的 API,并返回一個(gè)數(shù)組。然后,對(duì)于每個(gè)結(jié)果的結(jié)果,我們而我們每個(gè)結(jié)果并行;我們等待每個(gè)結(jié)果的圖像為.最后,我們將所有圖像作為 上傳到 s3。requestAPIresultssaveToDatabasegetImagesarraysOfImagesuploadToS3


我應(yīng)該提到,我寫了一個(gè)庫來處理復(fù)雜的異步任務(wù),比如你的任務(wù);以下是如何使用該庫簡化上述代碼。


const { pipe, fork, map, get } = require('rubico')


const onRecordAddTask = pipe([

  requestAPI,

  fork([

    map(getImages),

    map(saveToDatabase),

  ]),

  get(0),

  map(map(uploadToS3)),

])

我不能等到第一個(gè)任務(wù)的所有承諾都得到解決,才能開始執(zhí)行最新的任務(wù)。


因?yàn)榉祷貑蝹€(gè)承諾,你可以自由地讓它逃跑,這樣它就不會(huì)阻止你執(zhí)行最新的任務(wù)。onRecordAddTask


如果我在數(shù)據(jù)庫上插入許多“任務(wù)”記錄會(huì)發(fā)生什么


您將開始執(zhí)行任務(wù)的許多操作onRecordAddTask


查看完整回答
反對(duì) 回復(fù) 2022-08-27
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

簡短的回答是:是的


您可以同時(shí)運(yùn)行所有承諾。


使用并傳遞一系列承諾。Promise.all([])


您的代碼將如下所示:


async function main() {


    const promises = []

    for(const task of tasks){

        promises.push(task)

    }

    console.log('All promise at once')

    await Promise.all(promises)

    console.log('All promise at once done')

}


查看完整回答
反對(duì) 回復(fù) 2022-08-27
  • 2 回答
  • 0 關(guān)注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)