如何在 JavaScript 中實現動態回調參數 (How can I achieve dynamic callback arguments in JavaScript)


問題描述

如何在 JavaScript 中實現動態回調參數 (How can I achieve dynamic callback arguments in JavaScript)

如何在 JavaScript 中實現動態回調參數

我要編寫三個函數。我為什麼這樣做是因為我想封裝 initDB 的細節,這樣我可以寫更少的代碼。下面是它的樣子:

const initDB = (schemas: any[]) =>
  Realm.open({ path: 'CircleYY.realm', schema: schemas })
    .then((realm: Realm) => ({ realm }))
    .catch((error: Error) => ({ error }));

所以基本上這個函數只是初始化一個數據庫,它會返回一個數據庫實例或一個錯誤。

我還有一些特定的數據庫寫入函數,比如下面這個:

// Delete a message
const deleteOrder = (orderID: string, realm: Realm) => {
  realm.write(() => {
    const order = realm.objects('Orders').filtered(`primaryKey = ${id}`);
    realm.delete(order);
  });
};

我下面有這三個函數:

makeDBTransaction(deleteOrder(id));

and

makeDBTransaction(writeCommentInOrder(orderId, comment))

const makeDBTransaction = async (callback: Function) => {
  const { error, realm } = (await initDB([
    OrderSchema,
    ProductSchema,
  ])) as InitRealm;
  if (error) return { error };
  callback(realm); // Pass realm while maintaining the arguments specified in the callback which is dynamic
  return realm.close();
};


參考解法

方法 1:

I think you can keep adding arguments in an array in a required order and then apply the arguments to the function and call that function.

//for example

function foo1(x, y) {
  console.log(x,y);
}

function foo2(cb, y) {
  const x = 3;
  cb.apply(null, [x,y]);
}

foo2(foo1, 5);

//So your code will be like this
makeDBTransaction(deleteOrder, [id]);

const makeDBTransaction = async (callback: Function, arg: any[]) => {
  const { error, realm } = (await initDB([
    OrderSchema,
    ProductSchema,
  ])) as InitRealm;
  if (error) return { error };
  arg.push(realm);
  callback.apply(null, arg);
  return realm.close();
};

(by joycemarkadm)

參考文件

  1. How can I achieve dynamic callback arguments in JavaScript (CC BY‑SA 2.5/3.0/4.0)

#functional-programming #javascript #Callback #TypeScript #realm






相關問題

有沒有辦法在 C 中進行柯里化? (Is there a way to do currying in C?)

Scala 的產量是多少? (What is Scala's yield?)

功能性 javascript 和網絡瀏覽器 javascript 版本 (Functional javascript and web browser javascript versions)

從元組列表中獲取唯一路徑 (Getting Unique Paths from list of tuple)

用函數作為參數定義函數 (Defining a function with a function as an argument)

如何使用函數 VB.NET 插入數據庫? (How to use Function VB.NET Insert To Database?)

Python中列表的模式匹配 (Pattern matching of lists in Python)

如何在haskell中顯示派生樹? (how can i show a derivation tree in haskell?)

編寫一個可任意調用次數的 curried javascript 函數,該函數在最後一次函數調用時返回一個值 (Writing a curried javascript function that can be called an arbitrary number of times that returns a value on the very last function call)

我應該總是給我的函數一個返回值嗎? (Should I always give a return value to my function?)

如何在 JavaScript 中實現動態回調參數 (How can I achieve dynamic callback arguments in JavaScript)

Haskell 是否有一個函數可以創建將函數應用於列表的每個變體 (Haskell Is there a function for creating every variation of applying a function to a list)







留言討論