iT邦幫忙

0

請教一個fetch一個物件導向的問題

hihi 2022-05-05 22:24:531176 瀏覽
  • 分享至 

  • xImage

前輩們好 又是我

今天練習fetch 看到這個問題

試過GOOGLE也知道應該要用async awiat寫法來寫

但完全不知道該怎麼下手了 故來求救前輩們 希望不吝嗇拯救分享一下

問題一:
https://ithelp.ithome.com.tw/upload/images/20220506/201439140hql62e5kd.png

<%@ WebHandler Language="C#" Class="test" %>

using System;
using System.Web;
using System.Data;
using System.Collections.Generic;
using System.Threading;



public class test : IHttpHandler {
    JDB.JDB Main = new JDB.JDB();

    public void ProcessRequest(HttpContext context)
    { 
            string a = DateTime.Now.ToString("F");

        context.Response.ContentType = "text/plain; charset=utf-8";
        context.Response.AddHeader("Access-Control-Allow-Origin", "*");
            Random RN  =new Random();
            int t = RN.Next(5000);

        Thread.Sleep(t);
        context.Response.Write(t.ToString().PadLeft(4,'-') +">>" + a);

     }

    public bool IsReusable {
        get {
            return false;
        }
    }

    public string SQLToJSON(string sqlstr)
    {
        DataTable dt = Main.GetDataSet(sqlstr);
        System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
        List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
        Dictionary<string, object> row;
        foreach (DataRow dr in dt.Rows)
        {
            row = new Dictionary<string, object>();
            foreach (DataColumn col in dt.Columns)
            {
                row.Add(col.ColumnName, dr[col]);
            }
            rows.Add(row);
        }
        return serializer.Serialize(rows);
    }

}

問題二:

https://ithelp.ithome.com.tw/upload/images/20220506/20143914P88lTy8rnH.png

淺水員 iT邦大師 6 級 ‧ 2022-05-06 00:06:55 檢舉
請參考下面這張圖片貼上程式碼,會比較多人願意回答
https://d1dwq032kyr03c.cloudfront.net/upload/images/20220506/20112943CaY46NCTvh.png
deh iT邦研究生 1 級 ‧ 2022-05-06 08:05:03 檢舉
!
hihi iT邦新手 5 級 ‧ 2022-05-06 11:22:02 檢舉
好喔,已修正,謝謝大大提醒
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
淺水員
iT邦大師 6 級 ‧ 2022-05-06 13:04:53
最佳解答

中間貼的那段程式碼
其實只是告訴大家這個 API 是什麼
如果可以直接用文字敘述出來
可以節省其他人看那段程式碼的時間

而且要完成這個問題
只要知道 API 怎麼串接即可
不需要看得懂後端的程式碼
所以原本你這種發問方式會讓一些原本能幫你的人
因為看到後端語言就直接跳過了
(有可能不熟就懶了)

以問題一來說,大概可以這樣描述

背景環境

已知有一個 API

  • 請求方式:GET
  • URL:tc.ashx
  • 參數:無
  • 回傳:字串,例如 "3070>>2021年8月30日 下午 02:41:11"

需求

使用 fetch 依序呼叫這個 API 10 次,輸出像是下面的訊息

第1次:3070>>2021年8月30日 下午 02:41:11
第2次:3057>>2021年8月30日 下午 02:41:43

問題

這邊補自己的敘述或寫到一半的程式碼

淺水員 iT邦大師 6 級 ‧ 2022-05-06 13:32:40 檢舉

提供參考
這邊用到 用到 PromiseClosure
(async awiat 也可以寫,只是 Promise 算是基礎)

function execFetchAll(n) {
    let count = 0; //紀錄執行幾次
    function execFetch() {
        if (count < n) {
            ++count;
            fetch('tc.ashx').then(r=>{
                if(r.status!==200) {
                    return Promise.reject(`[${r.status}] ${r.statusText}`);
                }
                return r.text();
            }).then((fetchResult) => {
                console.log(`第 ${count} 次:${fetchResult}`);
            }, (err) => {
                console.log(`第 ${count} 次:fetch 失敗 ... ${err}`);
            }).finally(()=>{
                execFetch();
            });
        }
    }
    execFetch();
}
execFetchAll(10);

第二個問題比較簡單我就不寫了
因為跟第一個問題一樣都是牽涉到非同步的問題

hihi iT邦新手 5 級 ‧ 2022-05-06 13:41:57 檢舉

太感謝大德,第二題我自己試著寫寫看
卡關主要問題是tc.ashx內的CODE有些不太明白
會再提升自己,謝謝指點

我要發表回答

立即登入回答