2017-11-05 9 views
0

스트라이프 노드 API를 사용하는 모든 고객의 목록을 컴파일하려고합니다. 한 번에 100 명의 고객을 계속 가져와야합니다. 나는 비동기 대기를 사용하기 위해 API 호출 내에서 Promise를 사용해야한다고 믿지만, 내 인생에서 그걸 어디에 넣어야 할지를 알 수 없다. 이 요지를 공개적으로 사용하기를 원하며 올바르게 받아보고 싶습니다. 감사합니다.async를 사용하여 모든 스트라이프 고객을 가져 오는 것이 좋습니다

getAllCustomers() 

function getMoreCustomers(customers, offset, moreCustomers, limit) { 
    if (moreCustomers) { 
    stripe.customers.list({limit, offset}, 
     (err, res) => { 
     offset += res.data.length 
     moreCustomers = res.has_more 
     customers.push(res.data) 
     return getMoreCustomers(customers, offset, moreCustomers, limit) 
     } 
    ) 
    } 
    return customers 
} 

async function getAllCustomers() { 
    const customers = await getMoreCustomers([], 0, true, 100) 
    const content = JSON.stringify(customers) 
    fs.writeFile("/data/stripe-customers.json", content, 'utf8', function (err) { 
     if (err) { 
      return console.log(err); 
     } 
     console.log("The file was saved!"); 
    }); 
} 
+0

처럼 고정 될 수있다 ...'우연히 약속을 반환 stripe.customers.list'는 무엇입니까? –

+0

@ JaromandaX 예 그렇습니다 – user4815162342

+0

약속의 가치는 무엇입니까? 콜백에서'res'와 동일합니까? –

답변

0

stripe.customers.list({limit, offset}).then(res => ...)resstripe.customers.list({limit, offset}, (err, res)의 "콜백"버전에서 res와 동일한 경우 - 그때는 아마 코드를 다시 작성할 수 같은

const getMoreCustomers = limit => { 
    const getThem = offset => stripe.customers.list({limit, offset}) 
    .then(res => res.has_more ? 
     getThem(offset + res.data.length).then(result => res.data.concat(...result)) : 
     res.data 
    ); 
    return getThem(0); 
}; 

async function getAllCustomers() { 
    const customers = await getMoreCustomers(100); 
    const content = JSON.stringify(customers); 
    fs.writeFile("/data/stripe-customers.json", content, 'utf8', function (err) { 
     if (err) { 
      return console.log(err); 
     } 
     console.log("The file was saved!"); 
    }); 
} 
0

추가 Jaromanda X의에 대답, 그것은 고객의 API에 offset 옵션이없는 것 같지만, starting_afterhttps://stripe.com/docs/api/node#list_customers

그래서, getMoreCustomers이 코드에 지금 무슨 일

const getMoreCustomers = starting_after => { 
    const getThem = starting_after => stripe.customers.list({limit: 100, starting_after: starting_after}) 
    .then(res => res.has_more ? 
     getThem(res.data[res.data.length - 1]).then(result => res.data.concat(...result)) : 
     res.data 
); 
    return getThem(starting_after); 
}; 

async function getAllCustomers() { 
    const customers = await getMoreCustomers(null); 
    const content = JSON.stringify(customers); 
    fs.writeFile("/data/stripe-customers.json", content, 'utf8', function (err) { 
    if (err) { 
     return console.log(err); 
    } 
    console.log("The file was saved!"); 
    }); 
}