當我發(fā)送一個ajax請求后臺結(jié)果的時候,后臺返回數(shù)據(jù)的時間是不等的
因為使用到了區(qū)塊鏈技術(shù),當前臺去請求一個智能合約(方法)的時候后臺執(zhí)行的步驟是:
1.執(zhí)行方法(執(zhí)行智能合約)
2.生成區(qū)塊(過程時間不等100ms-2000ms)
3.返回結(jié)果給前臺
前端發(fā)送請求的過程:
http://127.0.0.1/contract
2.再發(fā)送一個請求?(查看后臺是否返回結(jié)果)
例:http://127.0.0.1/status
如果后臺還沒有將數(shù)據(jù)寫入?yún)^(qū)塊返回的結(jié)果為:?
blockid:
result:
如果后臺已經(jīng)將數(shù)據(jù)寫入?yún)^(qū)塊返回的結(jié)果為:
blockid: 1
result: {name: "xxxx", age: "20"}
http://127.0.0.1/contract后過2s再去調(diào)用http://127.0.0.1/status
現(xiàn)如今遇到的問題:
2s)導致用戶體驗非常不好現(xiàn)在我們想到的辦法是能不能循環(huán)的去調(diào)用http://127.0.0.1/status這個合約(方法)然后在里面做判斷,當blockid和result不等于空的時候就把數(shù)據(jù)返回。
請問如何使用jquery和原生javascript去做這個循環(huán)或者Promise去解決這個問題。
下面我貼一段代碼,是在網(wǎng)上找到的一個例子使用的是react的rxjs包中的Observable模塊:
const txExecEpic: Epic = (action$, store, { api }) => action$.ofAction(txExec.started)
.flatMap(action => {
const state = store.getState();
const client = api(state.auth.session);
const publicKey = keyring.generatePublicKey(action.payload.privateKey, true);
// 密碼校驗
if (!keyring.validatePrivateKey(action.payload.privateKey)) {
return Observable.of(txExec.failed({
params: action.payload,
error: {
type: 'E_INVALID_PASSWORD',
error: null
}
}));
}
return Observable.fromPromise(client.txCall({
requestID: action.payload.requestID,
pubkey: publicKey,
signature: action.payload.signature,
time: action.payload.time
})).flatMap(result => Observable.defer(() => client.txStatus({
hash: result.hash
}).then(status => {
if (!status.blockid && !status.errmsg) {
throw 'E_PENDING';
}
else {
console.log(status);
return status;
}
})).retryWhen(errors =>
errors.delay(100)
).flatMap(txResult => {
if (txResult.blockid) {
const actions = Observable.of<Action>(
txExec.done({
params: action.payload,
result: {
block: txResult.blockid,
result: txResult.result
}
}),
authorize(action.payload.privateKey)
);
if (action.payload.tx.silent) {
return actions;
}
else {
return actions.concat(Observable.of(enqueueNotification({
id: uuid.v4(),
type: 'TX_SUCCESS',
params: {
block: txResult.blockid,
tx: action.payload.tx
}
})));
}
}
else {
return Observable.of(txExec.failed({
params: action.payload,
error: {
type: txResult.errmsg.type as TTxError,
error: txResult.errmsg.error
}
}));
}
})).catch(error => Observable.of(txExec.failed({
params: action.payload,
error: {
type: (error.errmsg ? error.errmsg.type : error.error) as TTxError,
error: error.errmsg ? error.errmsg.error : error.msg
}
})));
});
請盡可能的回答多種解決的辦法并且貼出示例代碼
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領(lǐng)域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。